Как запустить приложение после получения разрешения? - PullRequest
0 голосов
/ 17 мая 2019

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

это функции, которые я использовал для получения разрешений: private void requestPermission () {

    ActivityCompat.requestPermissions(MainActivity.this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, RequestPermissionCode);

}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case RequestPermissionCode:
            if (grantResults.length > 0) {

                boolean StoragePermission = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                boolean RecordPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED;

                if (StoragePermission && RecordPermission) {

                    Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(MainActivity.this,"Permission Denied",Toast.LENGTH_LONG).show();

                }
            }

            break;
    }
}

public boolean checkPermission() {

    int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
    int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO);

    return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}

и здесь, где я использовал функции и воспроизводил аудио:

if (! CheckPermission ()) {

        requestPermission();

        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if (isFirstRun) {

            MediaPlayer mediaPlayer1 = MediaPlayer.create(this, R.raw.instruction);

            mediaPlayer1.start();
           // Toast.makeText(MainActivity.this, "First run", Toast.LENGTH_LONG).show();
            getSharedPreferences("Preference", MODE_PRIVATE).edit().putBoolean("isFirstRun", false).apply();

        }

1 Ответ

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

Вы делаете 2 асинхронные задачи: requestPermission () и воспроизводите аудио. Не синхронизируйте код с Thread.sleep ().

if(!checkPermission()){
    //it is async call, you never know when result come.
    requestPermission();
}

@Override
public void onRequestPermissionsResult(
        final int requestCode,
        @NonNull final String[] permissions,
        @NonNull final int[] grantResults
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (permissionGranted()) {
        playMusic();
    }
}

При таком подходе вам не нужна переменная 'isFirsRun'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...