2016-02-02 4 views
2

Я работаю над разрешением Android для M.Запрос разрешения со службы. Android M

В моем приложении в моей деятельности я запускаю сервис, где я использую следующий код для камеры.

Код для открытия камеры в службе

cameraManager.openCamera(frontFacingCameraId, stateCallback, null);

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

активность, где запрашивающих разрешение

if (PermissionUtil.getCameraPermission(this)) { Debug.d(TAG, "Camera Permission -- permission exsited"); performRecordingAction(); }

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case PermissionUtil.SDK__CAMERA_PERMISSION: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Debug.d(TAG, "Granted -- Camera Permission"); 
       performRecordingAction(); 
      } else { 
       Debug.d(TAG, "Denied -- Camera Permission"); 
       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      break; 
    } 
} 

PermissionUtil

public static boolean getCameraPermission(Activity activity) { 
    Debug.d(TAG, "getCameraPermission"); 
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA); 

    if (permission != PackageManager.PERMISSION_GRANTED) { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)) { 
      Debug.d(TAG, "Already Denied -- Camera Permission"); 
      return false; 
     } else { 
      Debug.d(TAG, "Request Camera Permission"); 
      ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, SDK__CAMERA_PERMISSION); 
      return false; 
     } 
    } else { 
     return true; 
    } 
} 

Но в службе в строке выше она все еще бросает ошибку за исключением безопасности.

Может кто подскажет, где я делаю ошибку? И есть ли способ запросить разрешение на обслуживание?

+0

Делитесь своим кодом, пожалуйста. С такой большой информацией все догадываются. Если вы не хотите, чтобы ответ отвечал, что вы не запрашиваете разрешения правильно. – SubliemeSiem

+0

Просим разрешения в действии до начала обслуживания! –

ответ

0

Просто добавьте android:exported="true" в вашем файле манифеста следующим образом:

<activity 
android:name="com.example.MainActivity" 
android:label="Main" 
android:exported="true"> 
<intent-filter> 
    <action android:name="android.intent.action.MAIN" > 
    </action> 
</intent-filter> 

Это решит проблему Exception безопасности.

Есть ли способ запросить разрешение на обслуживание?

Я., следовать Requesting permission from service

0

Вы не можете просить разрешение от службы, как вам нужен контекст активности для обратного вызова, обеспечиваемого системой. Также запрос разрешения выполняется асинхронно из вашего приложения. Смотрите также документы из requestPermissions()>>LINK:

Этот метод может начать деятельность, позволяющий пользователю выбирать, какие права выдавать и которые отклонить. Следовательно, вы должны быть подготовлено, что ваша деятельность может быть приостановлена ​​и возобновлена. Кроме того, , предоставляющий некоторые разрешения, может потребовать перезапуска вашего приложения. В такой случай система воссоздает стек активности до , доставляя результат в onRequestPermissionsResult (int, String [], int []).

Служба может только проверить, есть ли у него необходимые разрешения во время выполнения, а затем адаптировать его поведение.

Смежные вопросы