I need to launch my Android app on boot of the OS. Worst case, I can use a 3rd party app like LaunchAfterBoot to achieve this, however I was hoping to get it working using the AndroidManifest settings.
On AndroidSnippets - http://www.androidsnippets.com/autostart-an-application-at-bootup - it gives a way to get this working. I added this to tiapp.xml:
<android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest android:versionCode="8" android:versionName="1.07"> <supports-screens android:anyDensity="false"/> <application> <receiver android:enabled="true" android:name=".BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> </manifest> </android>When the app is built, the auto-generated AndroidManifest.xml looks like so:
<?xml version="1.0" ?><manifest android:versionCode="8" android:versionName="1.07" package="com.navtrak.driver" xmlns:android="http://schemas.android.com/apk/res/android"> <supports-screens android:anyDensity="false"/><uses-sdk android:minSdkVersion="7"/> <!-- TI_MANIFEST --> <application android:debuggable="false" android:icon="@drawable/appicon" android:label="Driver" android:name="DriverApplication"> <receiver android:enabled="true" android:name=".BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </receiver> <activity android:configChanges="keyboardHidden|orientation" android:label="Driver" android:name=".DriverActivity" android:theme="@style/Theme.Titanium"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:configChanges="keyboardHidden|orientation" android:launchMode="singleTask" android:name="ti.modules.titanium.map.TiMapActivity"/> <uses-library android:name="com.google.android.maps"/> <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiActivity"/> <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiTranslucentActivity" android:theme="@android:style/Theme.Translucent"/> <activity android:configChanges="keyboardHidden|orientation" android:name="org.appcelerator.titanium.TiModalActivity" android:theme="@android:style/Theme.Translucent"/> <activity android:configChanges="keyboardHidden|orientation" android:name="ti.modules.titanium.ui.TiTabActivity"/> <activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity"/> <service android:exported="false" android:name="org.appcelerator.titanium.analytics.TiAnalyticsService"/> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> </manifest>So as you can see, it copied the required settings across correctly, however the app still doesn't start on boot. The second part from the link above says you have to create a BootUpReceiver class:
public class BootUpReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }I was hoping that Titanium would handle invoking the intent in the AndroidManifest automatically, but this doesn't seem to be the case. What would it take to get this working?