我正在服务的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);
}
希望这可以帮助!