Ответы:
Во-первых, вам нужно разрешение в вашем AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Кроме того, в вашем AndroidManifest.xml, определите ваш сервис и прослушайте действие BOOT_COMPLETED :
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
</service>
<receiver
android:name=".receiver.StartMyServiceAtBootReceiver"
android:label="StartMyServiceAtBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Затем вам нужно определить получателя, который получит действие BOOT_COMPLETED и запустить службу.
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
}
И теперь ваш сервис должен быть запущен при запуске телефона.
Intent.ACTION_BOOT_COMPLETEDвместо жесткого кодирования строку в вашем приемнике. Также следует использовать новый Intent(context, MySystemService.class)конструктор при создании Intent.
Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own fileна public classлинию. Любые идеи?
Это как сделать деятельность начинается после андроида перезагрузки устройства:
Вставьте этот код в ваш AndroidManifest.xmlфайл внутри <application>элемента ( не внутри <activity>элемента):
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:enabled="true"
android:exported="true"
android:name="yourpackage.yourActivityRunOnStartup"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
Затем создайте новый класс yourActivityRunOnStartup(соответствующий android:nameуказанному для <receiver>элемента в манифесте):
package yourpackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class yourActivityRunOnStartup extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
Примечание: вызов i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);важен, потому что действие запускается из контекста вне действия. Без этого деятельность не начнется.
Кроме того , значение android:enabled, android:exportedи android:permissionв <receiver>теге , кажется , не является обязательным. Приложение получает событие без этих значений. Смотрите пример здесь .
Application? Может внутри onCreate()?
onReceive()изBroadcastReceiver
Слушайте ACTION_BOOT_COMPLETE и делайте то, что вам нужно оттуда. Здесь есть фрагмент кода .
Обновить:
Исходная ссылка на ответ недоступна, поэтому, основываясь на комментариях, здесь приведен связанный код, потому что никто никогда не пропустит код, когда ссылки не работают.
В AndroidManifest.xml (часть приложения):
<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>
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class); //MyActivity can be anything which you want to start on bootup...
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Кроме того, вы можете использовать приложение, такое как AutoStart, если вы не хотите изменять код, чтобы запустить приложение Android при запуске: AutoStart - без рута
Решение Шона у меня изначально не работало (Android 4.2.2). Мне пришлось добавить фиктивное действие в тот же проект Android и запустить действие вручную на устройстве хотя бы один раз. Затем решение Шона начало работать, и BroadcastReceiver был уведомлен после последующих перезагрузок.

Я хотел бы добавить один момент в этот вопрос, с которым я столкнулся пару дней. Я перепробовал все ответы, но они не работали для меня. Если вы используете Android версии 5.1, пожалуйста, измените эти настройки.
Если вы используете Android версии 5.1, то вы должны отменить (Ограничить запуск) в настройках приложения.
настройки> приложение> ваше приложение> Ограничить запуск (отменить выбор)
Другой подход заключается в использовании android.intent.action.USER_PRESENTвместо того, android.intent.action.BOOT_COMPLETEDчтобы избежать замедления во время процесса загрузки. Но это только в том trueслучае, если пользователь включил блокировку экрана - иначе это намерение никогда не передается.
Ссылочный блог - проблема с намерением Android ACTION_USER_PRESENT