我有一个服务(用于检测传入和传出呼叫),用户可以在我的应用程序中启动和停止;当设备重新启动时,服务也可以启动。
现在我正在运行设备处于睡眠状态时服务没有“清醒”的情况;并且当收到呼叫时,服务尚未唤醒以处理该来电。
我的问题是如何让我的服务意识到这种状况而不保留唤醒锁? 如果唤醒锁是解决这个问题的唯一方法,那么它应该是最好的实现方式呢?
答案 0 :(得分:1)
您可以将此权限添加到您的清单,并使BroadcastReceiver用于收听来电和内部接收器,您应该启动您的服务
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<!--This part is inside the application-->
<receiver android:name=".CallReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
答案 1 :(得分:0)
添加清单:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
现在在您的服务中:
PowerManager powerManager;
PowerManager.WakeLock wakeLock;
@Override
public void onCreate() {
super.onCreate();
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "NOTIFY");
}
现在,
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
wakeLock.acquire();
handleSERVICE(intent);
return START_STICKY;
}
@Override
public void onDestroy() {
wakeLock.release();
}