自工厂重置android以来的时间

时间:2012-09-03 06:41:10

标签: android broadcastreceiver

我正在尝试记录时间可靠的设备运行时间。我已尽力使用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());
}
}

3 个答案:

答案 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块中定义应用程序的权限。你添加到你的广播中的这种感觉 - 它不会为你添加接收它的权限,它只会强制任何其他可以触发你广播的应用获得此权限。在你的案件中如此无用。

希望有所帮助