广播接收器onReceive方法未被调用

4
我已在 AndroidManifest.xml 中定义了一个 BroadCastReceiver,如下所示:
<receiver
   android:name="com.example.hello.ScreenUnlockReceiver" 
   android:enabled="true" 
   android:singleUser="true">
   <intent-filter>
      <action android:name="android.content.Intent.ACTION_USER_PRESENT" />
   </intent-filter>
</receiver>

并将接收器定义如下:

public class ScreenUnlockReceiver 
      extends BroadcastReceiver {


   @Override
   public void onReceive(Context context, Intent intent) {
       //start activity
       Intent i = new Intent();
       i.setClassName("com.example.hello", "LoginActivity");
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       context.startActivity(i);
   }
}

但是当我解锁屏幕时,广播接收器未被触发,且LoginActivity未显示。LoginActivity是随Android SDK提供的默认登录活动。是否在uses-permission中遗漏了某些内容或其他问题,请告诉我。谢谢。 Santhosh

检查rciovati的答案,它是绝对正确的。 - Juned
2个回答

4

感谢快速回复。我已按上面提到的更改了 <action android:name> 为 android.intent.action.USER_PRESENT,然后像3h3所说的那样设置了 className .... 但是当通过滑动屏幕来解锁屏幕时,LoginActivity仍未启动。 - Santhosh S
我会尝试进行调试并检查接收器是否被正确调用。尝试检查Logcat,看看是否有一些信息可以帮助您找出问题的原因。 - rciovati

4

您应该这样解决问题
i.setClassName("com.example.hello", "com.example.hello.LoginActivity")

说明:此代码是关于it技术的,无需解释。

我按照你提到的更改进行了修改,但在解锁屏幕后,LoginActivity屏幕没有显示出来。我正在尝试在用户解锁平板电脑时向用户显示默认应用程序。如果你有任何指针,请告诉我。谢谢。 - Santhosh S
请尝试在您的活动的onResume()方法中添加以下代码:<br>final Window win = activity.getWindow(); final WindowManager.LayoutParams params = win.getAttributes(); params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;<br>我建议您查看Android源代码,实现AlarmClock、wishes等可以帮助您。 - 3h3
我之前在模拟器上尝试了一下,但是没有成功。后来在手机上尝试同样的操作,结果成功了。 - Santhosh S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接