1

私は自分のサービスに登録PhoneStateListenerしてonStartCommandいます。以下のAndroid Nデバイスで完全に機能していました。ただし、Android N デバイスでは応答しない場合があります。居眠りモードと関係ありますか?はいの場合、どのように対処しますか?

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

4 に答える 4

1

サービスで 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); 


}

お役に立てれば!

于 2016-12-06T00:14:02.203 に答える