我正在尝试记录设备运行时间的可靠时间。我已经尽力了
BOOT_COMPLETED
BroadcastReceiver
。由于如果应用程序被强制停止,所有接收器都会被删除,因此此方法对我不起作用。
我想知道是否有办法获取 Android 设备自上次恢复出厂设置以来的正常运行时间?
清单:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".TestReceiver"
android:enabled="true"
android:exported="true"
android:label="Test Receiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
接收器代码:
public class TestReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("bootreceiver", intent.toString());
}
}
对于任何真正寻求标题问题答案的人:
您可以尝试获取其中一个系统软件包的安装时间,例如:
long curTime = System.currentTimeMillis();
long installTime = getPackageManager().getPackageInfo("com.android.providers.applications", 0).firstInstallTime;
long timeDiff = curTime - installTime;
我不太确定你想如何计算恢复出厂设置的正常运行时间,而不是上次重新启动的正常运行时间。但是,如果您正在存储一些数据并检查它是否在启动时被删除 - 它可能会起作用。
但是,我认为使用 BroadcastReceiver 来实现 BOOT_COMPLETED 是一个好主意。而且强行关闭后接收器被删除通常是错误的。它仅适用于代码接收者。
相反,您可以在清单中定义接收器 - http://developer.android.com/guide/topics/manifest/receiver-element.html 如果你愿意的话 - 每次重新启动都会执行它,无论发生什么。
祝你好运
您在清单中定义权限时遇到问题。 它应该看起来像这样:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".TestReceiver"
android:enabled="true"
android:exported="true"
android:label="Test Receiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
您应该在 Uses 块中定义应用程序的权限。您添加到广播的权限 - 它不会为您添加接收它的权限,它只是强制任何其他可以触发您的广播的应用程序拥有此权限。对你来说没用。
希望有帮助