2016-06-16 3 views
-1

Я добавил все разрешения в файл манифеста. В Lollipop и все приложения будут запрашивать разрешения во время установки приложения, но когда приложение установлено в зефире, разрешение не спрашивает.Как просить разрешения во время выполнения приложения android в Marshmallow

Manifest Разрешения

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- My Location --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
+3

Возможный дубликат [разрешения на разрешение прошивки в Android-марке?] (Http://stackoverflow.com/questions/33666071/android-marshmallow-request-permission) –

+0

, так что вы получаете какую-либо ошибку при запуске приложения в устройстве зефира ? –

+0

Нет, я не получаю никаких ошибок. Но первое действие - экран заставки, а затем карта google, карта не заполняется. Ни одна из функций не работает. Разрешения необходимо добавить из настроек> приложение. Мне нужно спросить при установке или запуске приложения – Maria

ответ

0

Первый заявляют:

// Assume thisActivity is the current activity 

    int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.WRITE_CALENDAR); 

Запрос разрешения вам необходимо:

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

     // Show an expanation 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(thisActivity, 
       new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

Обрабатывать ответ разрешения запроса:

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 

      } 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 
    } 
} 
0

Во-первых, вам нужно классифицировать все эти разрешения. В версии Android M они в основном разделены на обычные разрешения (например, ACCESS_NETWORK_STATE в вашем файле манифеста) и Опасные разрешения (например, ACCESS_FINE_LOCATION). Для нормальных вам не нужно запрашивать их, которые автоматически предоставляются без напоминания пользователя об установке. То, что вам нужно сделать, это просто добавить их в манифест!

Однако опасные разрешения сложнее обрабатывать. При запуске приложения или выполнении соответствующей функции вы должны сначала проверить, были ли разрешения получены Context.checkSelfPermission(String permission). Позвоните по телефону Context.requestPermissions(String[] permissions, int requestCode), чтобы получить запрос по системному диалоговому окну и получить результат onRequestPermissionsResult().

Хорошая новость: вы можете запросить кучу разрешений одним API при запуске приложения. Кроме того, Опасные разрешения управляются несколькими группами. Например, вам нужно только запросить ACCESS_FINE_LOCATION и получить ACCESS_COARSE_LOCATION.

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