我如何以编程方式确定Android设备何时重启(无论是单独启动还是用户启动)?
答案 0 :(得分:10)
设置BroadcastReceiver并在清单中注册它以响应android.intent.action.BOOT_COMPLETED系统。当手机启动时,广播接收者的onReceive方法中的代码将会运行。确保它产生一个单独的线程或花费不到10秒,操作系统将在10秒后销毁你的broadcastreceiver线程。
答案 1 :(得分:5)
此代码段在android-os启动后自动启动应用程序。
AndroidManifest.xml 中的(应用程序部分):
// You must hold the RECEIVE_BOOT_COMPLETED permission in order to receive this broadcast.
<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" />
[..]
在Java类
中 public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
答案 2 :(得分:2)
使用BroadcastReceiver并收听广播Intent ACTION_BOOT_COMPLETED。
答案 3 :(得分:0)
如果您碰巧想知道设备是否已在应用程序内重新启动,则可以使用此代码。
fun hasDeviceBeenRebooted(app: Application): Boolean {
val REBOOT_PREFS = "reboot prefs"
val REBOOT_KEY = "reboot key"
val sharedPrefs = app.getSharedPreferences(REBOOT_PREFS,
val expectedTimeSinceReboot = sharedPrefs.getLong(REBOOT_KEY, 0)
val actualTimeSinceReboot = System.currentTimeMillis() - SystemClock.elapsedRealtime() // Timestamp of rebooted time
sharedPrefs.edit().putLong(REBOOT_KEY, actualTimeSinceReboot).apply()
return actualTimeSinceReboot !in expectedTimeSinceReboot.minus(2000)..expectedTimeSinceReboot.plus(2000) // 2 Second error range.
}