我正在尝试记录时间可靠的设备运行时间。我已尽力使用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());
}
}
答案 0 :(得分:2)
对于任何达到此目的的人,实际上都在寻找标题问题的答案:
您可以尝试获取其中一个系统软件包的安装时间,例如:
long curTime = System.currentTimeMillis();
long installTime = getPackageManager().getPackageInfo("com.android.providers.applications", 0).firstInstallTime;
long timeDiff = curTime - installTime;
答案 1 :(得分:0)
我不确定你想如何计算出厂重置的正常运行时间,而不是上次重启时的正常运行时间。但是,如果您要存储一些数据并检查它是否在启动时被删除 - 它可能会起作用。
但是,我认为使用BroadcastReceiver进行BOOT_COMPLETED是一个好主意。并且在强制关闭后删除接收器通常是错误的。它仅适用于代码中的接收器。
相反,您可以在Manifest中定义接收器 - http://developer.android.com/guide/topics/manifest/receiver-element.html 如果你这样做 - 它会在每次重启时执行,无论如何。
祝你好运答案 2 :(得分:0)
您在Manifest中定义权限时遇到问题。 看起来应该是这样的:
<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块中定义应用程序的权限。你添加到你的广播中的这种感觉 - 它不会为你添加接收它的权限,它只会强制任何其他可以触发你广播的应用获得此权限。在你的案件中如此无用。
希望有所帮助