Android,如何确定是否发生了重启?

时间:2011-09-30 21:35:47

标签: android

我如何以编程方式确定Android设备何时重启(无论是单独启动还是用户启动)?

4 个答案:

答案 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.
}