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

三世轮回 提交于 2019-12-21 06:57:17

问题


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


回答1:


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.




回答2:


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




回答3:


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.




回答4:


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



来源:https://stackoverflow.com/questions/5741987/android-how-to-start-an-application-on-the-sdcard-after-boot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!