разрешения на хранение не запрашиваются - PullRequest
0 голосов
/ 07 мая 2019

Я добавил к файлам манифеста эти разрешения

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-feature android:name="android.hardware.location.gps" />

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Но когда пользователь устанавливает приложение, единственное разрешение, которое ему задают и разрешает, это location .

Я также хочу попросить у пользователя разрешения на хранение. Как это возможно?

Ответы [ 3 ]

0 голосов
/ 07 мая 2019

Вы пробовали то, на что указывает документация Android:

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

    // Permission is not granted
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {
        // Show an explanation 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; 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.
    }
} else {
    // Permission has already been granted
}

https://developer.android.com/training/permissions/requesting#java

0 голосов
/ 07 мая 2019

Для получения «опасных» разрешений (включая «Хранение», «Местоположение», «Камера», «Календарь» и т. Д.) Вам необходимо запросить у пользователя разрешение не при установке, а когда это необходимо.Важно проверять каждый раз, когда требуется разрешение, потому что пользователь может отозвать разрешение в любое время.

Чтобы проверить разрешение (в Kotlin) (в данном примере это FINE_LOCATION, измените его на любое разрешение, которое вам необходимо).request):

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED
    ) {
//if permission not granted, start function to request permission
//MY_PERMISSIONS_REQUEST is the requestCode, an int > 0
        ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
            MY_PERMISSIONS_REQUEST
        )
    }

и затем переопределите функцию onRequestPermissionsResult:

    override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<String>, grantResults: IntArray
) {
    when (requestCode) {
        MY_PERMISSIONS_REQUEST -> {
            // If request is cancelled, the result arrays are empty.
            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                //granted - you are not able to use Location Functionality

            } else {
                // permission denied
                Toast.makeText(this, "Location Functionality Disabled.", Toast.LENGTH_LONG).show()
            }
            return
        }

        // Add other 'when' lines to check for other
        // permissions this app might request.
        else -> {
            // Ignore all other requests.
        }
    }

}

Вы также можете запросить несколько разрешений одновременно. Android 6.0 несколько разрешений

0 голосов
/ 07 мая 2019

Используйте код разрешения времени выполнения, когда вы добавляете данные во внутреннее хранилище. Для этого вы можете использовать dexture или просто разрешение lib.

...