好吧,我正在创建一个用于录制音频的应用程序,为此,我向该程序授予了两个可以完美运行的权限。我想在用户获得许可时播放音频。但我的代码在权限提示的同时播放音频。有人可以帮我吗?
这是我用来获取权限的函数: 私有(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/