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()メソッドに移動し、要求が承認されたときに起動する必要があります。

関連する問題