如何使用意图操作USER_PRESENT?

时间:2014-02-25 23:33:05

标签: android android-intent broadcastreceiver

我有一个时钟小部件应用程序,我需要识别手机何时解锁,我相信我可以使用动作USER_PRESENT,但我不能让它在BroadcastReceiver类中启动,我设置它在这样的清单中:

    <receiver
        android:name="com.myApp.myApp.MyWidgetIntentReceiver"
        android:exported="false"
        android:label="widgetBroadcastReceiver" >
        <intent-filter> 
            <action android:name="android.intent.action.USER_PRESENT" >
            </action>                               
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/demo_widget_provider" />
    </receiver>

这就是我试图在BroadcastReceiver中获取它的方式:

public class MyWidgetIntentReceiver extends BroadcastReceiver{

    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_USER_PRESENT){
            Log.i("TICK", intent.getAction());          
        }
    }

}

我解锁手机后没有开火,你能帮帮我或者给我一个更好的方法来检查手机何时解锁?谢谢!

3 个答案:

答案 0 :(得分:4)

删除android:exported="false"。这适用于我在Stock Android 5上

答案 1 :(得分:3)

删除android:exported="false"

  

机器人:输出:

广播接收器是否可以从其应用程序之外的来源接收消息 - 如果可以,则为“true”,否则为“false”。如果为“false”,则广播接收者可以接收的唯一消息是由具有相同用户ID的相同应用程序或应用程序的组件发送的消息。

来源:developer.android.com

答案 2 :(得分:2)

我通过在AppWidgetProvider类的onUpdate方法中使用 registerReceiver 并传递BroadcastReceiver类的实例来注册Intent.ACTION_USER_PRESENT来实现它,因为只在Manifest中添加它不是做任何事情。谢谢!