2017-02-23 5 views
0

Ich habe versucht, Camera2 API-Integration zu meiner App zu implementieren.Es gibt einen Absturz in einigen Geräten.Ich versuchte einige Vorschläge auf Stackoverflow, aber diese waren nicht hilfreich für mich.Wie um das zu beheben?java.lang.IllegalArgumentException: Oberfläche hatte keine gültige native Oberfläche

OnPause und OnStop von Tierbew:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_take_picture_new); 
    startBackgroundThread(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    closeCamera(); 
} 

@Override 
protected void onPause() { 
    Log.e(TAG, "onPause"); 
    //closeCamera(); 
    stopBackgroundThread(); 
    super.onPause(); 
} 

private void closeCamera() { 
    mCameraOpened = false; 
    if (null != cameraDevice) { 
     cameraDevice.close(); 
     cameraDevice = null; 
    } 
    if (null != imageReader) { 
     imageReader.close(); 
     imageReader = null; 
    } 
} 

protected void stopBackgroundThread() { 
    mBackgroundThread.quitSafely(); 
    try { 
     mBackgroundThread.join(); 
     mBackgroundThread = null; 
     mBackgroundHandler = null; 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

protected void startBackgroundThread() { 
    mBackgroundThread = new HandlerThread("Camera Background"); 
    mBackgroundThread.start(); 
    mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); 
} 

Ich habe Fehler wie unten, wenn ich capture Foto starten:

Fatal Exception: java.lang.IllegalArgumentException: Surface had no valid native Surface. 
    at android.hardware.camera2.legacy.LegacyCameraDevice.nativeGetSurfaceId(LegacyCameraDevice.java) 
    at android.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceId(LegacyCameraDevice.java:658) 
    at android.hardware.camera2.legacy.LegacyCameraDevice.containsSurfaceId(LegacyCameraDevice.java:678) 
    at android.hardware.camera2.legacy.RequestThreadManager$2.onPictureTaken(RequestThreadManager.java:220) 
    at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1248) 
    at android.os.Handler.dispatchMessage(Handler.java:111) 
    at android.os.Looper.loop(Looper.java:207) 
    at android.hardware.camera2.legacy.CameraDeviceUserShim$CameraLooper.run(CameraDeviceUserShim.java:136) 
    at java.lang.Thread.run(Thread.java:818) 
+0

Haben Sie das gelöst? – jelic98

+0

@ jelic98 Nr. Hast du ähnliches Problem? –

+0

Nein, aber dieses Problem tritt nur bei einigen Geräten auf. – jelic98

Antwort

-1

Da OnStop() nach onPause aufgerufen wird(). Sie haben versucht, Threads zu stoppen und dann die Kamera zu schließen, aber sollten umgekehrt tun. Sie sollten closeCamera() in onPause() und dann stopBackgroundThread in onStop() wie folgt aufrufen:

Verwandte Themen