Ich versuche nur, eine einfache Kamera-App, die Laufzeitberechtigungen verwendet ... scheint es gut zu laden, das erste Mal, wenn die App ist gestartet (fragt nach der Kamera Erlaubnis). Nachdem ich den Zugriff zugelassen habe, funktioniert es ... aber sobald ich es schließe und es wieder starte, wird nur ein weißes Bild mit meinen Symbolen angezeigt, die nicht reagieren. Ich habe die Berechtigungen manuell in der App überprüft und der Kamera wird immer noch Zugriff gewährt, aber ich denke, dass ich meinen Berechtigungscode vermassle. HierMeine einfache Kamera-App (Android) wird die Kamera nicht nach dem ersten Versuch laden
ist der MainActivity Code:
public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSIONS_REQUEST_CAMERA = 1;
private Camera mCamera = null;
private Camera mCameraFront = null;
private CameraView mCameraView = null;
public int switchCamera = 1;
// int permissionCheck = ContextCompat.checkSelfPermission(this,
// Manifest.permission.CAMERA);
// String[] perms = {"android.permission.CAMERA"};
// int permsRequestCode = 200;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
try {
mCamera = Camera.open(1);//you can use open(int) to use different cameras
} catch (Exception e) {
Log.d("ERROR", "Failed to get camera: " + e.getMessage());
}
SwapCamera();
// if (mCamera != null) {
//// mCameraView = new CameraView(this, mCamera);//create a SurfaceView to show camera data
//// FrameLayout camera_view = (FrameLayout)findViewById(R.id.camera_view);
//// camera_view.addView(mCameraView);//add the SurfaceView to the layout
// SwapCamera();
// }
//btn to close the application
ImageButton imgClose = (ImageButton) findViewById(R.id.imgClose);
imgClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCamera.setPreviewCallback(null);
mCamera.setErrorCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
System.exit(0);
}
});
// btn to switch camera
ImageButton imgSwitch = (ImageButton) findViewById(R.id.cameraSwitch);
imgSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// switchCamera++;
}
});
}
}
}
public void SwapCamera() {
mCameraView = new CameraView(this, mCamera);//create a SurfaceView to show camera data
FrameLayout camera_view = (FrameLayout)findViewById(R.id.camera_view);
camera_view.addView(mCameraView);//add the SurfaceView to the layout
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CAMERA: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// camera-related task you need to do.
try{
mCamera = Camera.open(1);//you can use open(int) to use different cameras
} catch (Exception e){
Log.d("ERROR", "Failed to get camera: " + e.getMessage());
}
if(mCamera != null) {
// mCameraView = new CameraView(this, mCamera);//create a SurfaceView to show camera data
// FrameLayout camera_view = (FrameLayout)findViewById(R.id.camera_view);
// camera_view.addView(mCameraView);//add the SurfaceView to the layout
SwapCamera();
}
//btn to close the application
ImageButton imgClose = (ImageButton)findViewById(R.id.imgClose);
imgClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCamera.setPreviewCallback(null);
mCamera.setErrorCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
System.exit(0);
}
});
// btn to switch camera
ImageButton imgSwitch = (ImageButton)findViewById(R.id.cameraSwitch);
imgSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// switchCamera++;
}
});
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
public void onActivityResult() {
}
}
ich verwirrt bin, wo ich die „else“ bin fehle ... Ich habe meinen „versuchen“ Block mit der onRequestPermissionsResult Methode ... Soll ich es in die onCreate-Methode verschieben? (innerhalb des Bereichs "if (ContextCompat.checkSelfPermission (this, Manifest.permission.CAMERA) ! = PackageManager.PERMISSION_GRANTED)" – fmi
Sie sollten es in die onCreate-Methode kopieren. @Vlad Matvienko erklärte. – innich