保持 Android 服务感知,而不是清醒
Keep Android service aware, not awake
我有一项服务(用于检测来电和去电),用户可以在我的应用程序中启动和停止该服务;该服务也可以在设备重新启动时启动。
现在我运行遇到设备休眠时服务不"awake"的情况;并且当收到呼叫时,服务尚未唤醒以处理该来电。
我的问题是如何在不为其保留唤醒锁的情况下让我的服务知道这种情况?
如果唤醒锁是解决这个问题的唯一方法,那么最好的实现方式应该是什么?
在清单中添加:
<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();
}
您可以将此权限添加到您的清单中,并使 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>
我有一项服务(用于检测来电和去电),用户可以在我的应用程序中启动和停止该服务;该服务也可以在设备重新启动时启动。
现在我运行遇到设备休眠时服务不"awake"的情况;并且当收到呼叫时,服务尚未唤醒以处理该来电。
我的问题是如何在不为其保留唤醒锁的情况下让我的服务知道这种情况?
如果唤醒锁是解决这个问题的唯一方法,那么最好的实现方式应该是什么?
在清单中添加:
<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();
}
您可以将此权限添加到您的清单中,并使 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>