Nano Hash - криптовалюты, майнинг, программирование

Как запрашивать разрешения во время выполнения приложения для Android в Marshmallow

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

Разрешения манифеста

<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" />

  • так вы получаете какую-либо ошибку, когда запускаете приложение на зефирном устройстве? 16.06.2016
  • Нет, я не получаю никакой ошибки. Но первое действие - это заставка, а затем карта Google не заполняется. Ни одна из функций не работает. Разрешения необходимо добавить из настроек > приложения. Мне нужно спросить при установке или запуске приложения 16.06.2016

Ответы:


1

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

PermissionsDispatcher

Декстер

RxPermissions

16.06.2016

2

Сначала объявить:

// 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
    }
}
16.06.2016

3

Во-первых, вам нужно классифицировать все эти разрешения. В версии 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.

16.06.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..