Как предоставить разрешения программно - PullRequest
0 голосов
/ 16 июня 2019

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

Я удалил три разрешения из манифеста изатем запустил приложение.Однако приложение упало.Я ожидал, что он запустится, так как отсутствующие разрешения были бы предоставлены автоматически / программно.

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

** код:

String[] PermissionsLocation =
        {
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.INTERNET
        };

private void checkPermissions() {
    int iter = 0;
    for (String p : PermissionsLocation) {
        if (ContextCompat.checkSelfPermission(this, p) != getPackageManager().PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, PermissionsLocation, 101 + iter);
        }
        ++iter;
    }
}

Ответы [ 4 ]

0 голосов
/ 17 июня 2019

Существует 2 вида разрешения 1) Нормальное 2) Опасное

Вам не нужно спрашивать разрешения для обычного разрешения.

По документам

«Разрешения разделены на несколько уровней защиты. Уровень защиты влияет на необходимость запроса разрешений во время выполнения.»

Ссылка docLink

0 голосов
/ 16 июня 2019

Проверьте, если это поможет

if(ContextCompat.checkSelfPermission(mActivity,Manifest.permission.INETRNET) == PackageManager.PERMISSION_GRANTED){
                    // Internet permission granted
                    Toast.makeText(mContext,"Permission granted.",Toast.LENGTH_SHORT).show();
                }else {
                    // Internet permission not granted
                    Toast.makeText(mContext,"Permission not granted.",Toast.LENGTH_SHORT).show();
                }
0 голосов
/ 17 июня 2019
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_select_language);
    requestPermissions();

}

private void requestPermissions() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(getApplicationContext(),
                Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
                 requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.CALL_PHONE,
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_LOGS,
                    Manifest.permission.SEND_SMS,
                    Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.READ_SMS,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.INTERNET,
                    Manifest.permission.RECEIVE_SMS


            }, 0);
        }
    }
0 голосов
/ 16 июня 2019

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.snazzyapp">

    <uses-permission android:name="android.permission.INTERNET"/> 
    <!-- other permissions go here -->

    <application ...>
        ...
    </application>
</manifest>

см. это для получения дополнительной информации.

...