Android - Как запустить приложение на /sdcard после загрузки
Есть ли способ запуска и приложения Android после загрузки автоматически, если он находится на /sdcard
?
Хорошо, возможно, BroadcastReceiver
. Но какое действие является правильным?
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)
Спасибо
Ян
Ответы
Ответ 1
Просьба указать его в файле манифеста.
</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>
предоставить разрешение "android.permission.RECEIVE_BOOT_COMPLETED" как ребенок манифеста.
и еще одна вещь, которую ваше приложение не должно быть установлено на SD-карте.
Ответ 2
Согласно Google, вы не должны помещать любое приложение, которое хотите запускать при загрузке на внешний диск.
"Система доставляет трансляцию ACTION_BOOT_COMPLETED до того, как внешнее хранилище будет установлено на устройство. Если ваше приложение установлено во внешнем хранилище, оно никогда не сможет получить эту широковещательную передачу".
http://developer.android.com/guide/topics/data/install-location.html#ShouldNot
Ответ 3
Я обычно регистрирую каждый фильтр намерений для широковещательного приемника в обоих направлениях (Android Manifest, а также динамически в классе, расширяющем приложение)
В AndroidManifest.xml как:
<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>
и в классе, который расширяет Application:
registerReceiver(new broadcastReciever(), new IntentFilter(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE));
и не забудьте добавить разрешение RECEIVE_BOOT_COMPLETED
и зарегистрировать класс, который расширяет приложение в манифесте Android.
Это должно быть сделано; не стесняйтесь обращаться за дополнительной помощью/разъяснениями.
Ответ 4
попробуйте использовать <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>
и этот <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
возможно QUICKBOOT_POWERON help u