安卓程式自啟動的辦法
阿新 • • 發佈:2019-02-15
千古文章一大抄,不過就是很少有個起作用的。
下面就是真正的 能夠隨系統啟動的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停止執行。做個備份,造福後人