Я пытаюсь запросить разрешение камеры, но всякий раз, когда я запускаю свой проект, мое приложение сначала прекращает всплывать, а затем показывает параметр «разрешить или запретить», если я нажму «никогда не показывать снова», он не позволит мне нажать «разрешить». И если я разрешаю запуск моего приложения, оно существует, и мне снова приходится открывать приложение. Но проблема исчезнет, и мое приложение будет работать отлично при следующей попытке. вот логарифм
и вот мой MainActivity.java
Примечание. Разрешение камеры уже задано в файле Manifest.xml.
package com.example.android.camerapermission;
import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.test.mock.MockPackageManager;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;
import com.nispok.snackbar.Snackbar;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CAMERA = 0;
ImageButton imageButton;
Camera camera;
Camera.Parameters parameters;
boolean isflash = false;
boolean isOn = false;
public static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageButton = (ImageButton) findViewById(R.id.imageButton);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] {Manifest.permission.CAMERA}, 0);
}
}
if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))
;
{
camera = Camera.open();
parameters = camera.getParameters();
isflash = true;
}
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isflash) {
if (!isOn) {
imageButton.setImageResource(R.drawable.on);
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
isOn = true;
} else {
imageButton.setImageResource(R.drawable.off);
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
isOn = false;
}
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Error.....");
builder.setMessage("Flashlight is not available on this device...");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
});
}
public void showCamera(View view) {
Log.i(TAG, "Show that camera button is clicked. Checking permission.");
/**
* Include camera permission and
* check if camera is available in phone or not
*/
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// Camera permission is not granted yet
requestCameraPermission();
} else {
//Camera is available, show the camera preview
Log.i(TAG, "CAMERA permission has granted, displaying camera preview");
showCameraPreview();
}
}
/**
* Request the Camera Permission again in the case of user mistakenly denied permission.
* Create a SnackBar that will prompt the user to grant the permission, otherwise it is requested direcly.
*/
private void requestCameraPermission() {
Log.i(TAG, " Camera permission is still not granted. Requesting permission.");
//Start (camera_permission_request)
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
// show an additional request to the user if the permission was not granted earlier.
} else {
//Camera permission has not been granted yet. Request directly.
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA);
}
// END (camera_permission_request)
}
private void showCameraPreview() {
getSupportFragmentManager().beginTransaction()
.replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
.commit();
}
/**
* Receiving permission after granted
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CAMERA) {
//Begin request (permission_result)
//Recieved permission result for the camera permission.
Log.i(TAG, "Request for Camera permission is received. ");
//Check if the only required permission has been granted
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Camera permission is safely granted, now you can preview.
Log.i(TAG, "Camera permission has succesfully granted, preview is being displayed");
} else {
Log.i(TAG, "CAMERA permission is not granted.");
// Finish(permission_result)
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
isflash = false;
if (camera != null) {
camera.release();
camera = null;
}
}
}
Вам нужно заключить вызов камеры в try catch.