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)

Спасибо
Ян


person Jan Nemec    schedule 21.04.2011    source источник
comment
Вы когда-нибудь решали это? У меня сейчас аналогичная проблема.   -  person Gabriel Sanmartin    schedule 09.01.2013
comment
Ваш вопрос помог мне найти ответ, спасибо. :D   -  person Kamran Ahmed    schedule 14.08.2013
comment
Если вы найдете это полезным, вы должны принять ответ.   -  person Kamran Ahmed    schedule 03.06.2015
comment
Боюсь, единственный правильный ответ на этот вопрос: нет, никак.   -  person BladeCoder    schedule 30.07.2015
comment
Этот вопрос stackoverflow.com/questions/8248617/ правильно отвечает на эту проблему, которая заключается в создании получателя как для BOOT_COMPLETED, так и для MEDIA_MOUNTED   -  person Bron Davies    schedule 18.09.2015


Ответы (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 поможет вам

person Amir K. Zarini    schedule 17.07.2015

Пожалуйста, укажите это в файле манифеста.

</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-карте.

person Rahul Chaudhary    schedule 15.07.2015
comment
Это не отвечает на вопрос, потому что вопрос конкретно задавался, как получать уведомления при загрузке, когда приложение установлено на SD-карте. - person BladeCoder; 30.07.2015
comment
Я не уверен, но это невозможно по моему мнению. - person Rahul Chaudhary; 30.07.2015
comment
Я согласен, поэтому правильный ответ - это невозможно. - person BladeCoder; 30.07.2015

Согласно Google, вы не должны размещать приложения, которые хотите запускать при загрузке, на внешний диск.

«Система доставляет широковещательную рассылку ACTION_BOOT_COMPLETED до того, как внешнее хранилище будет подключено к устройству. Если ваше приложение установлено во внешнем хранилище, оно никогда не сможет получить эту широковещательную рассылку».

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

person Community    schedule 14.09.2015

Я обычно регистрирую каждый фильтр намерений для широковещательного приемника в обоих направлениях (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.

Это должно сделать; не стесняйтесь обращаться за дополнительной помощью/разъяснениями.

person Kamran Ahmed    schedule 14.08.2013