Andriod中应用开机自启动的问题
2016-06-14 13:38
288 查看
这周的时候,因为项目需要,加了开机自启动。在测试的时候发现在联想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",添加位置如下
上面几个步骤就可以实现一个简单的开机自起应用
如果你用的是小米的测试机,你可能会说,这不起作用,因为根本就接收不到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);
如果别的手机收不到而且是非原生系统的话,可以试一下。另外其他的可能的实现思路:
(1)开机监听比较敏感,一般涉及到系统安全问题;所以可以尝试监听一下别的开机事件替代,比如SD卡的准备状态...
(2) 非系统应用不具备获取广播的权限,那么想办法将App的默认安装路径放到系统文件夹/system/apps/下面
(3)至于以上的解决办法,可以说是没解决。只是给正在纠结找不到原因的道友一个问题根源的解脱。我们可以在启动页添加一个友情提示,提示用户可以尝试着这么操作
还有一点不知道大家注意到了没,就是当你强行停止你的程序时,你发现即使你授权了,下次开启,你的应用也自起不了了,希望知道原因的朋友给点提示
需要源码的朋友,可以点击下面的连接,下载源码看看
http://download.csdn.net/detail/shihuiyun/9549158
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);
如果别的手机收不到而且是非原生系统的话,可以试一下。另外其他的可能的实现思路:
(1)开机监听比较敏感,一般涉及到系统安全问题;所以可以尝试监听一下别的开机事件替代,比如SD卡的准备状态...
(2) 非系统应用不具备获取广播的权限,那么想办法将App的默认安装路径放到系统文件夹/system/apps/下面
(3)至于以上的解决办法,可以说是没解决。只是给正在纠结找不到原因的道友一个问题根源的解脱。我们可以在启动页添加一个友情提示,提示用户可以尝试着这么操作
还有一点不知道大家注意到了没,就是当你强行停止你的程序时,你发现即使你授权了,下次开启,你的应用也自起不了了,希望知道原因的朋友给点提示
需要源码的朋友,可以点击下面的连接,下载源码看看
http://download.csdn.net/detail/shihuiyun/9549158
相关文章推荐
- Linux下python升级步骤
- Factorial Trailing Zeroes - Javacript
- poj之旅——1222
- 钱海支付笔试
- NPF驱动核心指南
- 将一组数据保存在字符数组中
- 第15周阅读程序(1)
- 想建设一个能承受500万PV/每天的网站吗?如果计算呢?
- 【剑指offer】用两个栈实现队列
- MJRefresh框架中使用问题(使用self,不走dealloc方法)
- 【java线程池】ThreadPoolExecutor详解
- 四大组件之Service(三)-Service的跨进程调用
- eclipse进行debug时进入threadpoolexecutor.class中的解决办法
- memcached学习之assoc部分
- 转载自马哥视频学习笔记---Linux Web服务器网站故障分析常用的命令之awk用法的简单示例
- ubuntu下和开发板下播放音乐
- 构建gcc交叉编译工具链
- ArrayList方法初探
- 蓝牙音乐 A2DP 剖析
- Android 反编译 -smali文件对比java文件