나는 체크 박스가 표시되었을 때 백그라운드 서비스를 트리거하는 환경 설정에서 옵션 체크 박스가있는 앱을 가지고있다. 이 서비스는 사용자로부터 오디오를 녹음 할 수있는 권한이 필요하므로 사용자가 상자를 체크했을 때 환경 설정 활동 자체의 허가를 요청하고 권한이 부여되면 서비스를 시작했습니다. 이건 내 코드입니다 :Android : 활동에서 권한을 요청하고 서비스를 시작한다고해서 서비스에 대한 권한이 부여되지 않습니까?
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(),"yolololo",Toast.LENGTH_LONG).show();
Log.e(LOG_TAG,"service started");
// Check if user has given permission to record audio
int permissionCheck1 = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
if (permissionCheck1 == PackageManager.PERMISSION_GRANTED) {
runRecognizerSetup();
}
return super.onStartCommand(intent, flags, startId);
}
에있어서 지금은 그것이 오디오를 녹음 할 수있는 권한을 요청 응용 프로그램을 실행할 때, 서비스가 시작
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Log.e("voice trigger button clicked 1") ;
CheckBoxPreference cpb=(CheckBoxPreference)findPreference("keyVoiceTrigger");
cpb.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
Context context=getActivity();
public boolean onPreferenceClick(Preference preference) {
Log.e("voice trigger button clicked 1") ;
int permissionCheck1 = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.RECORD_AUDIO);
//int permissionCheck2 = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
if ((permissionCheck1 == PackageManager.PERMISSION_DENIED)){
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.RECORD_AUDIO}, 1);
return false;
}
context.startService(new Intent(getActivity(), com.speechrecognition.android.speak.service.VoiceService.class));
return true;
}
});
Preference pref = findPreference(key);
if (pref instanceof ListPreference) {
ListPreference lp = (ListPreference) pref;
if (mKeyMaxResults.equals(key)) {
updateSummaryInt(lp, R.plurals.summaryMaxResults, lp.getEntry().toString());
} else {
pref.setSummary(lp.getEntry());
}
}
}
하지만 서비스 내에서 권한을 검사 할 때 runRecognizerSetup()이 시작되지 않습니다. 도와주세요! 감사.
서비스에서 사용 권한을 요청할 수 없습니다. –