保持Android服务的意识,而不是清醒

时间:2016-11-10 08:31:58

标签: android android-service

我有一个服务(用于检测传入和传出呼叫),用户可以在我的应用程序中启动和停止;当设备重新启动时,服务也可以启动。

现在我正在运行设备处于睡眠状态时服务没有“清醒”的情况;并且当收到呼叫时,服务尚未唤醒以处理该来电。

我的问题是如何让我的服务意识到这种状况而不保留唤醒锁? 如果唤醒锁是解决这个问题的唯一方法,那么它应该是最好的实现方式呢?

2 个答案:

答案 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();
    }