2016-07-02 2 views
2

Начиная с версии 6.0 (API уровня 23), мы можем запросить разрешения во время выполнения. Однако, согласно документам, все разрешения должны быть определены в AndroidManifest.xml, поэтому в API ниже 23, эти разрешения будут предоставлены до установки приложения.Запросить разрешение на основе уровня API

Я хочу запросить разрешение ACCESS_FINE_LOCATION только во время выполнения - поскольку это конфиденциальное разрешение, запрашивающее его до установки без какого-либо контекста, приведет к уменьшению загрузки.

Я ориентирую свое приложение на уровни API 11+, поэтому я задаюсь вопросом, можно ли запрашивать разрешение ACCESS_FINE_LOCATION в старых API (т. Е. Не указывать его в AndroidManifest для API старше 23 лет) и запрашивать его только для API 23+.

Update

Для уточнения, я хочу знать, можно ли сделать следующее:

AndroidManifest.xml

IF API_LEVEL>=23: { 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
} 
ELSE: 
{ 
} 
+0

Во время выполнения вы кладете проверку разрешений на версии, если версия> = 23, чем проверять разрешение во время выполнения иначе ничего не делать ....... –

+0

@ Er.Arjunsaini, не надо ли мне перечислять эти разрешения статически в AndroidManifest.xml? – Ohad

+0

«Во всех версиях Android ваше приложение должно объявить как нормальные, так и опасные разрешения, необходимые в манифесте приложения, как описано в разделе« Объявление разрешений »." – Ohad

ответ

2
  • не может запрашивать разрешение, которое не является объявлено в Манифест.
  • Вы не можете изменить свой манифест во время выполнения.

Что вы можете сделать, это сделать 1 Flavor ОРИЕНТИРОВАННОЙ API 23+ с разрешением объявленных и другого вкусом без разрешения таргетинга API 23-.

-1

Нет, это не возможно в AndroidManifest .xml

вы можете запросить разрешение перед использованием функций, основанных на этом разрешении.

if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.ACCESS_FINE_LOCATION) 
     != PackageManager.PERMISSION_GRANTED) { 

      //Ask for permission 
      ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
       requestCode); 

}else{ 

//already permitted . Do your work here.. 
} 

Теперь переопределить onRequestPermissionsResult() метод, чтобы увидеть, если пользователь разрешил запрос или не

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 

      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission is granted, Now you can execute function 

      } else { 

       // permission denied, Don't execute your function to avoid any crashes 

      } 
      return; 

} 

вы не должны проверить SDK версии здесь для получения дополнительной информации click here Счастливый Coding :)

5

Я думаю, что вы можете сделать это с помощью:

<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" /> 

Вы можете прочитать об этом в официальной документации: uses-permission-sdk-23

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