Intereting Posts
Правильно ли хранить базы данных с кодировкой base64 внутри базы данных? Анализ XML с сайта на Android-устройство ListView не обновляется после добавления в SQLiteDatabase Может ли ключ модификатора Android отменить действие? Обрезать или заменить все запятые и пробелы из строки StartActivitySync зависает при возврате активности на передний план Элемент списка просмотра Android Изменение через 10 секунд автоматически? JTidy ничего не возвращает после обработки HTML Повторная установка броска исключения IllegalArgumentException для асинхронного вызова DELETE FormUrlEncoded Хорошая идея включить файлы JAR в библиотеку Android (потенциальный конфликт с другими библиотеками)? EditText: Toggle InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS Windows 7 adb драйвер Samsung galaxy S3 Как вызвать карту google из моего приложения для Android, например, вызвать адрес электронной почты Android RecyclerView с GridLayoutManager делает диапазон элементов несколькими рядами Eclipse Android XML-контент не работает

OnRequestPermissionsResult не вызывается обратно в андроидную активность

Я пытаюсь получить разрешение камеры от пользователя перед запуском моей активности камеры. OnRequestPermissionsResult никогда не вызывается после того, как пользователь нажимает «Разрешить» в диалоговом окне разрешения. Вот мой класс активности:

public class ImageCaptureActivity extends AppCompatActivity { public static final String TAG = ImageCaptureActivity.class.getSimpleName(); private static final int REQUEST_CAMERA = 0; private static final int REQUEST_CAMERA_PERMISSION = 1; private Point mSize; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_capture); Display display = getWindowManager().getDefaultDisplay(); mSize = new Point(); display.getSize(mSize); // Request for Camera Permission requestForCameraPermission(findViewById(android.R.id.content)); } /** * @param view * @brief requestForCameraPermission */ public void requestForCameraPermission(View view) { Log.v(TAG, "Requesting Camera Permission"); final String permission = Manifest.permission.CAMERA; if (ContextCompat.checkSelfPermission(ImageCaptureActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(ImageCaptureActivity.this, permission)) { showPermissionRationaleDialog(getString(R.string.camera_permission_rationale), permission); } else { requestForPermission(permission); } } else { launch(); } } /** * @param message * @param permission * @brief showPermissionRationaleDialog */ private void showPermissionRationaleDialog(final String message, final String permission) { new AlertDialog.Builder(ImageCaptureActivity.this) .setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ImageCaptureActivity.this.requestForPermission(permission); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create() .show(); } /** * @param permission * @brief requestForPermission */ private void requestForPermission(final String permission) { ActivityCompat.requestPermissions(ImageCaptureActivity.this, new String[]{permission}, REQUEST_CAMERA_PERMISSION); } /** * @brief launch */ private void launch() { Log.v(TAG, "Camera Permission Granted, launching the CameraActivity"); String documentId = getIntent().getStringExtra(IntentNames.INTENT_EXTRA_WIP_DOCUMENT_ID); Intent startCustomCameraIntent = new Intent(this, CameraActivity.class); startCustomCameraIntent.putExtra(IntentNames.INTENT_EXTRA_WIP_DOCUMENT_ID, documentId); startActivityForResult(startCustomCameraIntent, REQUEST_CAMERA); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_CAMERA_PERMISSION: final int numOfRequest = grantResults.length; final boolean isGranted = numOfRequest == 1 && PackageManager.PERMISSION_GRANTED == grantResults[numOfRequest - 1]; Log.v(TAG, "Camera Permission callback on onRequestPermissionsResult"); if (isGranted) { launch(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } } 

Вот мой манифест App с разрешением камеры:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myapp.testpackage"> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera.front" android:required="true" /> <uses-feature android:name="android.hardware.camera2" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application 

Моя зависимость от колыбели:

 compile 'com.android.support:appcompat-v7:24.0.0' compile 'com.android.support:design:24.0.0' compile 'com.android.support:support-v4:24.0.0' 

Я сам пробовал свой код, и все работает отлично. Я думаю, что единственное, что может быть проблемой, это сценарий, когда ваша деятельность имеет эти два флага:

  android:noHistory="true" android:excludeFromRecents="true" 

Вот парень, который объясняет проблему: https://stackoverflow.com/a/35772265/5281581