#android #samsung-galaxy
#Android #samsung-galaxy
Вопрос:
Мое внутреннее приложение для Android отлично работало на Samsung Tab S2 и автоматически получало разрешения на доступ к «хранилищу» и «местоположению» устройства. Но, когда я устанавливаю приложение на более новый Samsung Galaxy Tab S7, я должен вручную предоставить разрешение для приложения в настройках. По умолчанию для него установлено значение «Разрешения не разрешены», как я могу это автоматизировать. AndroidManifest.xml имеет следующие настройки
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="22"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Комментарии:
1. developer.android.com/training/permissions/requesting
2. @Michael спасибо, что объясняет, почему он работал на более старой версии, в которой был Android 5.2, но на этих Android 9
3. уменьшите целевую версию, тогда она не будет
Ответ №1:
Разрешения для Android претерпели радикальные изменения после M
выхода Android. до этого разработчики могут просто заблокировать все разрешения в AndroidManifesto
файле, и прежде чем пользователь установит приложение, он / она должен утвердить все разрешения для запуска приложения.
Однако сейчас все по-другому. Android ожидает, что эти разрешения будут предоставлены во время выполнения, т. Е. Когда Выполняется функция, для которой требуется это разрешение, она сначала запрашивает это разрешение и на основе ответа пользователя обрабатывает это. Если разрешение предоставлено, то хорошо. Если нет, то просто отобразите сообщение, в котором может быть указано, что эта функция не будет работать при отсутствии этого разрешения. В этом случае, поскольку пользователь уже отклонил разрешение, он / она теперь должен перейти к настройкам, чтобы включить ранее отклоненное разрешение.
Ответ №2:
Вы должны предоставить разрешение от пользователя. Вы можете использовать его внутри фрагмента:
Java:
if (ActivityCompat.checkSelfPermission(getContext(),
android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(getActivity(),
new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION);
} else {
Log.e("DB", "PERMISSION GRANTED");
}
Kotlin:
if (ActivityCompat.checkSelfPermission(getContext(),
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(getActivity(), arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
REQUEST_LOCATION)
} else {
Log.e("DB", "PERMISSION GRANTED")
}
и внутренняя активность:
Java:
int checkPermission= ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA);
if (checkPermission!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity)getContext(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
}
else {
Log.e("DB", "PERMISSION GRANTED")
}
Kotlin:
val checkPermission = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA)
if (checkPermission != PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(getContext() as Activity, arrayOf<String>(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION)
}
else
{
Log.e("DB", "PERMISSION GRANTED")
}