Это способ заставить занятие запускаться после перезагрузки устройства Android:
Вставьте этот код в файл 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>
не кажутся обязательными. Приложение получает событие без этих значений. Смотрите пример здесь .