我正在服务的PhoneStateListener中注册我的onStartCommand。它在android N设备以下完美运行。但有时它在android N设备中没有响应。与打ze睡模式有关吗?如果是,该如何解决?

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

最佳答案

在尝试在服务中运行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);


}


希望这可以帮助!

10-05 17:40