Andriod中应用开机自启动的问题

这周的时候,因为项目需要,加了开机自启动。在测试的时候发现在联想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);  

如果别的手机收不到而且是非原生系统的话,可以试一下。另外其他的可能的实现思路:
(1)开机监听比较敏感,一般涉及到系统安全问题;所以可以尝试监听一下别的开机事件替代,比如SD卡的准备状态...
(2) 非系统应用不具备获取广播的权限,那么想办法将App的默认安装路径放到系统文件夹/system/apps/下面
(3)至于以上的解决办法,可以说是没解决。只是给正在纠结找不到原因的道友一个问题根源的解脱。我们可以在启动页添加一个友情提示,提示用户可以尝试着这么操作

还有一点不知道大家注意到了没,就是当你强行停止你的程序时,你发现即使你授权了,下次开启,你的应用也自起不了了,希望知道原因的朋友给点提示


需要源码的朋友,可以点击下面的连接,下载源码看看

    http://download.csdn.net/detail/shihuiyun/9549158


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值