1

나는 체크 박스가 표시되었을 때 백그라운드 서비스를 트리거하는 환경 설정에서 옵션 체크 박스가있는 앱을 가지고있다. 이 서비스는 사용자로부터 오디오를 녹음 할 수있는 권한이 필요하므로 사용자가 상자를 체크했을 때 환경 설정 활동 자체의 허가를 요청하고 권한이 부여되면 서비스를 시작했습니다. 이건 내 코드입니다 :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()이 시작되지 않습니다. 도와주세요! 감사.

답변

0

서비스 권한을 요청해야한다고 생각합니다. 그러나 내가 기억할 수있는 것에서 그것은 약간 까다 롭습니다.

당신은 아마 내가 그것을 해결하는 방법을 발굴 할 수 있다면 내가 볼 서비스

If it's denied: Display notification through activity and request permission 

확인 권한에 필요합니다.

+0

서비스에서 사용 권한을 요청할 수 없습니다. –

1

requestPermissions은 동기 작업이 아닙니다 : 사용자에게 권한을 승인해야하는 대화 상자를 표시합니다. onRequestPermissionsResult()에있는 경우에만 사용자가 허가를 승인했는지 거부했는지 알 수 있습니다.

startService으로 전화를 연결하면 onRequestPermissionsResult() 방법으로 이동해야하며 요청이 승인되었을 때만 전화를 걸어야합니다.