Intereting Posts
Как включить доступ к местоположению программно в android? Как включить режим отладки в Google Glass для тестирования приложения Android в Google Glass? Установите RelativeLayout для заполнения неиспользуемого пространства Android JobScheduler: если вы планируете одну и ту же работу с периодическим временем, возобновляет ли она период? Theme.Holo.Light.DarkActionBar на сотах Как встроить пользовательский шрифт в приложение Android (WebView) OnIabPurchaseFinished никогда не звонил. Android нелегальное использование Является ли функция автономной диктовки в Jelly Bean частью AOSP, и если да, то в каком пакете она находится? Android N сбой в TextAppearanceSpan Удалите все неиспользуемые ресурсы из проекта Android Android: панель действий Шерлока выпадала Android: вертикальная галерея? Сканирование и печать с использованием устройства Android Android GUI-архитектура – отношение между поверхностью / представлением / окном / холстом

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