简体   繁体   中英

Android - How to start an application on the /sdcard after boot

Is there a way how to start and android application after a boot automatically if it is on the /sdcard ?

Ok, probably by BroadcastReceiver . But which action is the right one?

ACTION_BOOT_COMPLETED - does not work if it is on the /sdcard (documented)
ACTION_MEDIA_MOUNTED - does not work if it is on the /sdcard (which is undocumented)
ACTION_EXTERNAL_APPLICATIONS_AVAILABLE - does not work, I do not know why
ACTION_USER_PRESENT - does not work if the BroadcastReceiver is registered in AndroidManifest (which is undocumented, but documentation bug has been reported)

Thanks
Jan

Please mention it in manifest file.

</uses-permission>    
<receiver android:name=".BootReceiver"
    android:enabled="true"
    android:exported="true"
    android:label="BootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>

provide permission "android.permission.RECEIVE_BOOT_COMPLETED" as child of menifest.

and one more thing your app must not be installed in sdcard.

According to Google, you should not put any app you want to run at boot on an external drive.

"The system delivers the ACTION_BOOT_COMPLETED broadcast before the external storage is mounted to the device. If your application is installed on the external storage, it can never receive this broadcast."

http://developer.android.com/guide/topics/data/install-location.html#ShouldNot

I usually register every intent filter for a broadcast receiver both ways (Android Manifest as well as dynamically in a class that extends Application)

In AndroidManifest.xml as:

    <receiver
            android:name=".broadcastReciever"
            android:enabled="true"
            android:exported="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
            </intent-filter>
        </receiver>

and in a class that extends Application:

registerReceiver(new broadcastReciever(), new IntentFilter(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE));

and don't forget to add RECEIVE_BOOT_COMPLETED permission and register the class which extends Application in the Android Manifest.

This should do; feel free to ask for any more help/clarification.

try using <receiver android:name=".BootCompleteReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver>

and this <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

perhaps QUICKBOOT_POWERON help u

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM