当用户解锁屏幕时,我的应用程序需要祝酒,所以我注册了一个来获取清单中BroadcastReceiver
的意图,如下所示:ACTION_USER_PRESENT
<receiver
android:name=".ScreenReceiver" >
<intent-filter>
<action
android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
然后我定义了一个这样的类:
package com.patmahoneyjr.toastr;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ScreenReceiver extends BroadcastReceiver {
private boolean screenOn;
private static final String TAG = "Screen Receiver";
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
screenOn = true;
Intent i = new Intent(context, toastrService.class);
i.putExtra("screen_state", screenOn);
context.startService(i);
Log.d(TAG, " The screen turned on!");
} else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOn = false;
}
}
}
但是由于某种原因,Log 语句被打印了两次,我的服务做了两次敬酒而不是一次敬酒。有谁知道为什么会发生这种情况,我能做些什么来阻止它?我是否忽略了一些愚蠢的事情?
编辑:我非常抱歉大家,但我自己发现了问题......错误是在应该接收广播的服务类中,我已经实例化了一个新的 ScreenReceiver 并且它也正在接收意图。我误解了课程,并认为要接收意图,我必须在那里有一个,但是在删除该块之后,我只收到一次意图。Android 没有两次发送意图,只是被接收了两次......谢谢大家的帮助!