Как запросить у пользователя разрешения WRITE_SETTINGS и WRITE_EXTERNAL_STORAGE - PullRequest
0 голосов
/ 06 декабря 2018

надеюсь, что кто-то может мне помочь, поэтому я разрабатываю приложение для мелодии звонка, и мне нужно спросить пользователя о разрешениях WRITE_SETTINGS и WRITE_EXTERNAL_STORAGE, когда он нажимает на пункты меню (установить мелодию по умолчанию, alarme ...)

вот мой код для пользовательского адаптера:

...............

PopupMenu popup = new PopupMenu(getContext(),more);
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {

//I think I should write the permissions code here 

int ringtone = currentWord.getAudioResourceId();

..............

именно здесь я получаю ошибки: ввод 'this' вызывает проблему, которую я пытался изменить на Mainactivity.this, но все еще не 'т работа

public class WordAdapter extends ArrayAdapter<Word>  {


public WordAdapter(Context context, ArrayList<Word> words) {
    super(context, 0, words);

}

private int STORAGE_PERMISSION_CODE = 2;
private RelativeLayout rl ;


private void requestStoragePermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE) || (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.READ_EXTERNAL_STORAGE))) {

        new AlertDialog.Builder(getContext())
                .setTitle("Permission needed")
                .setMessage("This permission is needed because of this and that")
                .setPositiveButton("ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions(com.example.android.miwok.MainActivity,
                                new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
                    }
                })
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .create().show();

    } else {
        ActivityCompat.requestPermissions(WordAdapter.this,
                new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == STORAGE_PERMISSION_CODE)  {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Permission GRANTED", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
        }
    }
}

1 Ответ

0 голосов
/ 06 декабря 2018

Лично я бы порекомендовал вам использовать TedPermission или Декстер для запроса разрешения пользователя.Он имеет простой интерфейс, и результат прост, предоставлен или запрещен.

Ted Permissions можно использовать вместе с RxAndroid, который может оказаться полезным.

Это ваш выбор, удачи в вашем приложении!

...