java - 获得权限后如何启动应用程序?

标签 java android audio recording

好吧,我正在创建一个用于录制音频的应用程序,为此,我向该程序授予了两个可以完美运行的权限。我想在用户获得许可时播放音频。但我的代码在权限提示的同时播放音频。有人可以帮我吗?

这是我用来获取权限的函数: 私有(private)无效 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;
}

这里是我使用函数并播放音频的地方:

如果(!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();

        }

最佳答案

您创建了 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”变量。

关于java - 获得权限后如何启动应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176816/

相关文章:

c# - 使用C#从RTMP服务器获取和播放音频流的最简单方法是什么?

java - java源代码有测试用例吗?

android - ViewModel 中的 ObservableField 值不会使用数据绑定(bind)更新 UI

java - 起初我在 TreeSet 中插入 null。之后我插入任何其他值为什么它会给出 NPE?

java - Android API 的客户端等待时间

java - Android Java Bixolon SPP-R300 打印图像和蓝牙

Java - 在背景音乐上播放声音

c++ - 在 C++ 中使用 WASAPI 录制时如何访问音频波形缓冲区?

java - 为什么 zabbix 不显示从 java 代码接收到的值?

java - 从列表中多选