当前位置: 首页 > 知识库问答 >
问题:

如何在重新启动后立即启动锁定屏幕活动?

栾昂雄
2023-03-14

我想在设备重新启动后与启动通知(如消息、Viber通知、Whatsapp等)并排启动锁定屏幕活动。如何做到这一点??.我已经制作了一个广播接收器,它接收引导完成操作,然后启动一个服务,该服务再次用intent.action_screen_off和intent.action_screen_on意图过滤器注册相同的接收器,该接收器启动锁定屏幕活动。以下是我的代码:

AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" ></uses-permission>

<receiver>
       <intent-filter android:priority="2147483647">
            <action android:name="android.intent.action.BOOT_COMPLETED" />
       </intent-filter>
</receiver>

当然我在舱单上声明了服务。

这是我的广播接收器类

public class LockScreenBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
  Log.d("BroadCastReceiver", "ReceivedIntent");

  if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {

  Intent myIntent = new Intent(context, LockScreenActivity.class);
  myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  myIntent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

  if (!LockScreenActivity.isActivityRunning) {
    context.startActivity(myIntent);
  }else{
    Log.d("BroadCasrReceiver","LockScreenActivity is running");
  }

  }else if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
  Log.v("LockScreenBroadReceiver","boot completed");
  Intent startServiceIntent = new Intent(context,LockScreenService.class);             
  context.startService(startServiceIntent);
 }
}
}

和服务类:

LockScreenBroadCastReceiver broadCastReciever;
public static boolean isRunning;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    isRunning = true;
    registerReceiver();
}

@Override
public void onDestroy() {
    super.onDestroy();
    isRunning = false;
    unregisterReceiver(broadCastReciever);
    Log.d("LockScreenReceiver", "ReceiverUnregistered");
    sendBroadcast(new Intent("RestartLockScreenService"));
}

private void registerReceiver(){
    IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
    intentFilter.addAction(Intent.ACTION_SCREEN_ON);
    broadCastReciever = new LockScreenBroadCastReceiver();
    registerReceiver(broadCastReciever,intentFilter);
    Log.d("LockScreenReceiver", "ReceiverRegistered");
 }
}

共有1个答案

唐阳泽
2023-03-14

您可以像这样在manifist中使用Bootcplate的intentFilter instace:

<action android:name="android.intent.action.USER_PRESENT" />
 类似资料:
  • 即使屏幕被锁定,如何在设备上开始活动。我尝试了下面的方法,但是不起作用。 广播接收器:

  • 我是swift和Xcode新手,我想知道是否有人愿意向我解释,我应该如何让我的启动屏幕显示3秒钟,然后在这段时间内稍微淡出? 我想做一个我以前构建的网页的web视图,但希望它在启动屏幕之前淡出。 我已经阅读了所有其他与该主题相关的问题,但我不理解它们。我也一直在关注一些关于这个主题的教程,但什么都没有。 有人吗,拜托?

  • 我使用一个空活动为我的应用程序创建了一个启动屏幕,该活动在背景图像中保持可见3秒钟。通常,应用程序在背景图像变为可见之前以白色屏幕启动,然而,有些应用程序已经以“真实”的初始屏幕图像启动。如何实现这一点?

  • 问题内容: 我想构建一个锁屏更换应用程序。有什么方法可以创建一个侦听器/服务,该监听器/服务将在用户唤醒/解锁屏幕时启动我的应用程序? 问题答案: 请参阅mylockforandroid的源代码, 您将需要使用DeviceAdminReceiver来禁用默认的Android 屏幕锁。 当用户解锁屏幕将and 注册为时启动活动: 将此代码添加到manifast.xml中,将ScreenReceive

  • 问题内容: 我只希望在应用程序生命周期中仅显示一次启动屏幕。这是我的代码: SplashScreenActivity.java: 表现: 问题是如果我按硬件HOME botton隐藏该应用程序,然后在应用程序列表中再次打开该应用程序。它将再次显示启动屏幕(而不是显示)。是否只有在应用程序“新鲜”启动时才显示启动屏幕(不在onresume()上显示)?谢谢! 问题答案: 是的,有可能。使用Share

  • 我已经本地化了,通过它将LaunchScreen分成两部分。