私はユーザーの介入なしにさまざまな電話機能をテストするためのアプリを作ったが、一部のデバイスでは機能していなかった。私の理論では、実行時のアクセス権が必要だと私は正しかった。アクティビティに実行時パーミッションを入れると、完全に動作します。問題は、ユーザーからのアクセス許可を要求し、ユーザーの操作ができないことです。ユーザーの操作なしでアクティビティにアクセス許可を与える方法はありますか?Android-Runtime Permissionにユーザーの操作が許可されていませんか?
私は、レコーダーアクティビティが動作する場所にアクティビティを含めますが、許可を与えるユーザーに依存します。助けてください!!それは権限の目的を否定してしまうため
public static final int RECORD_AUDIO_PERMISSION_REQUEST = 3;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*
* API's to launch the application when the tablet is locked or
* display is turned off
*/
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
setContentView(R.layout.activity_recorder);
//Check to see if the device has a microphone
PackageManager pm = getPackageManager();
boolean micPresent = pm.hasSystemFeature(PackageManager.FEATURE_MICROPHONE);
if (!micPresent) {
Log.i(log_tag, "There is no microphone present in this device.");
exit_function();
} else {
createTempFile(status_tag, "INPROGRESS");
//Create the file to write the recording
try {
FileOutputStream fOut = openFileOutput("audio_test.3gp", MODE_WORLD_READABLE);
} catch (IOException e) {
e.printStackTrace();
Log.e(log_tag, "FAILED TO CREATE THE FILE OUTPUT STREAM");
exit_function();
}
// if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, RECORD_AUDIO_PERMISSION_REQUEST);
//start_recording();
}
}
//Start the Recording
private void start_recording() {
if (recorder != null) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
//Setting for the Recorder
try {
Log.i(log_tag, "Setting the recorder");
//This is the path that the file will be saved
path = getFilesDir().getAbsolutePath() + "/audio_test.3gp";
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(path);
} catch (Exception e) {
Log.e(log_tag, "Recording Settings Failed");
exit_function();
}
//Prepare the Recorder
try {
Log.i(log_tag, "Preparing the Recorder");
recorder.prepare();
} catch (Exception e) {
e.printStackTrace();
Log.e(log_tag, "Recording failed");
exit_function();
}
//Start the Recorder
try {
Log.i(log_tag, "Starting the recorder");
title_text = ((TextView) findViewById(R.id.textView));
title_text.setTextColor(Color.RED);
title_text.setText("RECORDING");
recorder.start();
//The recording lasts as long as he timer and then stops
mHandler.postDelayed(new Runnable() {
public void run() {
if (recorder != null) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
Log.e(log_tag, "First Delay");
exit_function();
}
}, timer);
createTempFile(status_tag, "Complete");
} catch (Exception e) {
e.printStackTrace();
Log.e(log_tag, "Recorder start failed");
exit_function();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case RECORD_AUDIO_PERMISSION_REQUEST:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
start_recording();
} else {
onDestroy();
}
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
**幸い**あなたが – Selvin
できない、それは、自動的に無使用のランタイム許可のプロセス全体を、それを許可しなければならない場合。あなたのapiレベルを23未満にしてください。 –
@Selvinは、幸いにも** un **を入れるのを忘れてしまったようですね:P –