Android 屏幕唤醒 + 屏幕解锁 + 开机广播android.intent.action.BOOT_COMPLETED
1.内容说明
Android手机开机后,会发送android.intent.action.BOOT_COMPLETED广播 流程:广播接收器 (屏幕唤醒 + 屏幕解锁 + 接收开机广播)
代码如下:
2.代码
/**
* @Author: Su
* @Date: 2022/11/30
* @Description:广播接收器
*/
public class BootupReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("BootupReceiver---",intent.getAction());
Toast.makeText(context,intent.getAction(),Toast.LENGTH_SHORT).show();
//屏幕唤醒
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
@SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "BootBroadcastReceiver");
wl.acquire();
//屏幕解锁
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("BootBroadcastReceiver");
kl.disableKeyguard();
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
// context, AutoRun.class
Intent newIntent = new Intent(context, MainActivity.class);
/* MyActivity action defined in AndroidManifest.xml */
newIntent.setAction("android.intent.action.MAIN");
/*
* If activity is not launched in Activity environment, this flag is
* mandatory to set
*/
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
/* if you want to start a service, follow below method */
context.startActivity(newIntent);
}
}
}
/**
* @Author: Su
* @Date: 2022/11/30
* @Description:清单文件配置广播接收器
*/
<receiver
android:name=".receiver.BootupReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
/**
* @Author: Su
* @Date: 2022/11/30
* @Description:添加权限
*/
<!-- 开机监听-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- 唤起APP-->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<!-- 悬浮窗权限-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
3.常见问题
Android API Level8以上的时候,程序可以安装在SD卡上。如果程序安装在SD卡上,那么在BOOT_COMPLETED广播发送之后,SD卡才会挂载,因此程序无法监听到该广播。
4.解决方案
清单文件 目录下添加:
android:installLocation=“internalOnly”
5.android:installLocation说明
android:installLocation的属性有"auto"、“internalOnly”、“preferExternal”
auto:程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户可以决定把程序放在外部储介质还是内存中.
internalOnly:默认值.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.
preferExternal:将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了forward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.文章来源:https://www.toymoban.com/news/detail-414650.html
意见反馈
如果各位大佬有什么意见可以提出来,进行修改,欢迎各位大佬提出问题!!!文章来源地址https://www.toymoban.com/news/detail-414650.html
到了这里,关于Android 屏幕唤醒 + 屏幕解锁 + 开机广播android.intent.action.BOOT_COMPLETED的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!