关于android程序开机自启动失败的问题

时间:2021-01-12 15:41:06

因为公司需求,查了下android开机自启动的代码实现,使用的是博客园-空山不空的代码

然后发现开机启动失败,查了很久没找到原因,网上说的方法比较统一,然后发现了他这

段代码和别人的不同

      <SPAN style="COLOR: #ff00ff"><receiver android:name=".BootBroadcastReceiver"         <intent-filter>          <action android:name="android.intent.action.BOOT_COMPLETED"/>          <category android:name="android.intent.category.HOME"/>         </intent-filter>      </receiver>  </SPAN>  别人都没有<span></span>,然后我将上段代码修改如下 <receiver android:name=".BootBroadcastReceiver"        <intent-filter>         <action android:name="android.intent.action.BOOT_COMPLETED"/>          <category android:name="android.intent.category.HOME"/>         </intent-filter>     </receiver>顺便把权限的那个也去了,开机启动成功附空山不空的完整方法:

背景知识:当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字
符串常量表示为 android.intent.action.BOOT_COMPLETED。只要在程序中“捕捉”到这个消息,再启动之
即可。记住,Android框架说:Don''t call me, I''ll call you back。我们要做的是做好接收这个消息的准备,而
实现的手段就是实现一个BroadcastReceiver。

1、界面Activity,BootStartDemo.java文件

 

?
1234567891011121314151617181920212223242526 public class BootStartDemo extendsActivity {     /** Called when the activity is first created. */    @Override    publicvoid onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 无title        requestWindowFeature(Window.FEATURE_NO_TITLE);        // 全屏        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.main);        newThread() {             publicvoid run() {                 try                    /*  8秒后关闭页面*/                    sleep(10000);                }catch (Exception e) {                    e.printStackTrace();                }finally {                     finish();// 关闭页面                 }            }        }.start();      }}

这段代码很简单,当Activity 启动时,会显示TextView,用它显示你想显示的字样,并且这个页面只显示10秒后消失。

2、接收广播消息:BootBroadcastReceiver.java

?
1234567891011121314 public class BootBroadcastReceiver extendsBroadcastReceiver {     staticfinal String action_boot="android.intent.action.BOOT_COMPLETED"      @Override    publicvoid onReceive(Context context, Intent intent) {        if(intent.getAction().equals(action_boot)){              Intent ootStartIntent=newIntent(context,BootStartDemo.class);             ootStartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);             context.startActivity(ootStartIntent);         }      }  }

该类继续自 BroadcastReceiver,覆载方法 onReceive 中,检测接收到的 Intent 是否符合
BOOT_COMPLETED,如果符合,则启动BootStartDemo这个Activity。

3、配置文件

(1)AndroidManifest.xml :

?
1234567891011121314151617181920212223 <?xml version="1.0"encoding="utf-8"?><!-- 这是一个开机自启动程序 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.ajie.bootstartdemo"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon"android:label="@string/app_name">        <activity android:name=".BootStartDemo"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                 <category android:name="android.intent.category.LAUNCHER"/>             </intent-filter>        </activity>    <SPAN style="COLOR: #ff00ff"><receiver android:name=".BootBroadcastReceiver"        <intent-filter>         <action android:name="android.intent.action.BOOT_COMPLETED"/>          <category android:name="android.intent.category.HOME"/>         </intent-filter>     </receiver> </SPAN>    </application>
<SPAN style="COLOR: #ff00ff"><STRONG><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission></STRONG> </SPAN></manifest>

注意其中颜色标红那一部分,该节点向系统注册了一个 receiver,子节点 intent-filter 表示接收
android.intent.action.BOOT_COMPLETED 消息。并且还要配置android.permission.RECEIVE_BOOT_COMPLETED权限。

(2)Layout文件,main.xml

?
1234567891011121314151617 <?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"          ><TextView       android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:text="@string/boottext"    android:textColor="#5F2DD2"    android:background="#FFFFFF"    android:textSize="60px"     android:gravity="center_horizontal"    /></LinearLayout>

完成后,编译出apk包,安装到模拟器或手机中。关机,重新开机,就会显示BootStartDemo这个Activity显示出来的页面