Android开机出现不能自启动Activity的问题

关于设置了权限并且监听了RECEIVE_BOOT_COMPLETED广播但还是不能开机启动相应组件的问题,网上找了一些答案,基本上都说的是在正常情况,没有任何意外的情况下开机启动activity或者service,我这里发现一种情况也导致开机后没有调用onReceive()方法,故记录下来供遇到相同情况的朋友们参考。

首先还是在应用程序包里面新建BootBroadcastReceiver类并继承BroadcastReceiver,重写onReseiver()方法,代码如下:

public class BootBroadcastReceiver extends BroadcastReceiver{
	private static final String action_boot = "android.intent.action.BOOT_COMPLETED";
	@Override
	public void onReceive(Context context, Intent intent) {
		if(intent.getAction().equals(action_boot))
		{
			Log.d("onReceive:", "Boot system");
			Intent startIntent = new Intent(context,MainActivity.class);
			startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			context.startActivity(startIntent);
		}
	}

}


再在AndroidMenifest.xml添加权限,代码如下:

         
             
                 
                 
             
         

 
  

将程序运行在虚拟机上,运行完成后要注意先退出一次程序手动点击启动一次再通过adb执行如下命令重启虚拟机

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
不出意外虚拟机重启完成软件也跟着启动了,如下:


接下来运行在真机上面,那么问题来了,不同的机型有可能不会启动,是什么原因呢?

经过一番测试我这里发现一个原因,就是虽然在AndroidMenifest.xml里面申明了开机启动权限实际上软件并没有获取这个权限,我用的是三星的机子,发现在设置->应用程序->应用程序权限管理这里面并没有出现Test这个软件相应权限的分配,我尝试着使软件获取另外的权限,比如:短信发送这个权限,我加入了这个权限如下:


然后我再在三星的机子上面运行这个程序,意外的发现弹出了权限选择这个对话框,如下:

Android开机出现不能自启动Activity的问题_第1张图片

我们看到这个原来这里有一个自动运行的权限选择项,把他打开,点击确定,再重启软件,重启手机后软件自动启动,问题解决。

这是我遇到的开机不能启动的问题,故在此做个记录,同时也供其他朋友参考。

至于为什么加了开机启动权限而没有弹出这个框我也不知道,可能三星机型对此做了什么处理。

在此希望对同样遇到开机不能自动运行的问题的朋友一个帮助。射射~~

你可能感兴趣的:(android)