2016-12-05 14 views
1

私のPhoneStateListenerを私のサービスのonStartCommandに登録しています。それはアンドロイドNデバイスの下で完全に動作していました。しかし、時にはアンドロイドNデバイスで応答しない。それはドーズモードに関連していますか?はいの場合はそれに取り組む方法?NutgatでPhoneStateListenerが応答しない場合があります

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
    CustomPhoneStateListener phoneStateListener = new CustomPhoneStateListener(); 
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

答えて

0

私はまた、サービスでPhoneStateListenerを実行しようと、この問題があったが、それが唯一のN・デバイス上だけで「ドロップ」のと同じように思えます。

私は多くの異なる提案を試みましたが、7.0を実行しているnexus5xでリスナーを失い続けました。時間の100%を生きていける方法は、サービスにフォアグラウンド通知を実行させることでした。基本的には、サービスが生存している限り通知トレイには存続します。これは、発信コールが応答されたときのように、以前のリスナーを削除するさまざまな電話状態を通じてサービスを維持します。通知ビルダにサウンドを設定したり、振動を与えたりしない限り、目立たないほどです。このように見えるのonCreateマイサービス:

MyPhoneListener phoneStateListener = new MyPhoneListener(getApplicationContext()); 
    TelephonyManager telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
    telephonymanager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 


    Intent notificationIntent = new Intent(this, YourActivity.class); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      notificationIntent, 0); 

    Notification notification = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_favorites) //status bar icon 
      .setContentTitle("Title") //whatever title 
      .setContentText("Stuff") //main notification text 
      .setContentIntent(pendingIntent).build(); 

    startForeground(12345, notification); 

、その後、あなたがサービスのonDestroyで通知を削除します。このことができます

@Override 
public void onDestroy() { 
    Log.i("log", "service ending"); 
    NotificationManager mNotifyMgr = 
      (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

    mNotifyMgr.cancel(12345); 


} 

願っています!

0

解決策を見つけました:私のアプリの1つがNoughatの同じ問題に直面していました。デバッグ中に、状態リスナーが一度だけ呼び出されていることがわかりました。アクティビティが作成されたときにもそれが呼び出されました。私がコールするとすぐに、アクティビティはバックグラウンドで実行され、リスナーは呼び出されませんでした。したがって、私はonCreateでアタッチしたリスナーが「アクティビティをonResumeにアタッチしています」ということを推測しました。あなたの問題は解決されます。

onResume() { 
    PhoneCallListener p = new PhoneCallListener; 
    TelephonyManager t = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 
    t.listen(p,PhoneStateListener.LISTEN_CALL_STATE); 
} 
0

あるいはマニフェストにあなたのレシーバを登録し、有効/私はこの問題を抱えていたし、自動起動することをアプリに許可すると2〜3日を無駄にした後、それを解決しPackageManagerhttps://stackoverflow.com/a/6529365/671580

0

を経由して、必要なときにコードでそれを無効にします設定 - >権限 - >自動起動の管理

+0

ヌガットでこのような設定を見つけることができません – PPB

関連する問題