这周的时候,因为项目需要,加了开机自启动。在测试的时候发现在联想4.4.2的手机上测试,是正常的,而在华为5.1的手机上测试根本不起作用。首先咱先来说一说开机自起应用怎么来实现,大体思路如下:
1.在Mainfestxml文件中注册广播(在xml中注册的广播为常驻型广播,即使你的应用退出,也照样在监听你所要监听的广播)
<receiver android:name="<span style="color:#ff0000;">com.example.atextdemo</span>.BootCastReceiver"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
标红的地方是你所建的广播类所存在的包名(name=包名.类名),特别注意别忘了添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2.定义开机广播接收的receiver
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Intent service = new Intent(context, MainActivity.class);
service.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(service );
}
}
3.
需要严重注意一下,就是Apk需要设置默认安装到手机内存,因为外设SD卡是接收不到开机广播的 android:installLocation="internalOnly",添加位置如下
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.atextdemo"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly"
>
上面几个步骤就可以实现一个简单的开机自起应用
如果你用的是小米的测试机,你可能会说,这不起作用,因为根本就接收不到andriod.intent.action.BOOT_COMPLETED这个广播,下面你听我说,这不是你的代码的问题,小米手机的Andriod系统是定制的,所以屏蔽掉了开机广播的发送,也就是非系统应用不具备权限,你要说那怎么办,别急这样做
系统与安全文件夹--->安全中心--->授权管理--->自启动管理--->对本App添加自启动授权
对你的应用进行开机自起的授权,不知小米手机,华为,三星的也是类似,你可能又会说,作为开发者的我们知道这么做,但用户不一定知道啊,下面是我给 的一点点建议
1.在程序第一次运行的时候给个土司,Toast提示下用户怎么去设置
2.在引导页面用图片的形式展示出来设置的具体步骤
3.在需要的时候,由你的应用自动跳到设置界面,代码如下
Intent i = new Intent();
ComponentName comp = new ComponentName("com.android.settings",
"com.android.settings.BackgroundApplicationsManager");
i.setComponent(comp);
startActivity(i);
还有一点不知道大家注意到了没,就是当你强行停止你的程序时,你发现即使你授权了,下次开启,你的应用也自起不了了,希望知道原因的朋友给点提示
需要源码的朋友,可以点击下面的连接,下载源码看看
http://download.csdn.net/detail/shihuiyun/9549158