1. 程式人生 > >安卓程式自啟動的辦法

安卓程式自啟動的辦法

千古文章一大抄,不過就是很少有個起作用的。
下面就是真正的 能夠隨系統啟動的app的AndroidManifest.xml內容

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.cocos.testqd" android:versionCode="1" android:versionName="1.0" android:installLocation="internalOnly">
  <uses-sdk android:minSdkVersion="9" />
  <uses-feature android:glEsVersion="0x00020000" />
  <application android:label="@string/app_name" android:icon="@drawable/icon">
    <!-- Tell Cocos2dxActivity the name of our .so -->
    <meta-data android:name="android.app.lib_name" android:value="cocos2dcpp" />
    <activity android:name="org.cocos2dx.cpp.AppActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|keyboardHidden|screenSize">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <receiver android:enabled="true" android:exported="true" android:name="org.cocos2dx.cpp.BootCompletedReceiver"  android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
      <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
  </receiver>
  </application>
  <supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.intent.action.BOOT_COMPLETED"></uses-permission>
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
</manifest>

其中關鍵程式碼在於
  <uses-permission android:name="android.intent.action.BOOT_COMPLETED"></uses-permission>
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
以及
 <receiver android:enabled="true" android:exported="true" android:name="org.cocos2dx.cpp.BootCompletedReceiver"  android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
      <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
  </receiver>

還有android:installLocation="internalOnly" 因為廣播訊息先於sd卡完成,所以,必須裝在手機記憶體中。另外,安裝之後的程式必須啟動過一次!(再次更正:是必須啟動後正常退出一次!在這裡是:Director::getInstance()->end();)


然後要在專案目錄下,以cocos專案為例

testqd\proj.android\src\org\cocos2dx\cpp 新建一個檔案BootCompletedReceiver.java

其內容如下

package org.cocos2dx.cpp;

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
 
public class BootCompletedReceiver extends BroadcastReceiver { 
  @Override 
  public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
    { 
      Intent newIntent = new Intent(context, AppActivity.class); 
      newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(newIntent);       
    }       
  } 
}

然後打包,編譯,執行就啟動起來了。之前網上搜的一堆都不行,無奈google,凡是見到點不同的都加上去。。最後終於成功了。當然我也不知道之前少了哪裡。要麼沒反應,要麼彈出來個框 很抱歉 XXX停止執行。做個備份,造福後人