安卓恢复出厂设置以来的时间

问题描述 投票:0回答:3

我正在尝试记录设备运行时间的可靠时间。我已经尽力了

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());
}
}
android broadcastreceiver
3个回答
2
投票

对于任何真正寻求标题问题答案的人:

您可以尝试获取其中一个系统软件包的安装时间,例如:

long curTime = System.currentTimeMillis();
long installTime = getPackageManager().getPackageInfo("com.android.providers.applications", 0).firstInstallTime;
long timeDiff = curTime - installTime;

0
投票

我不太确定你想如何计算恢复出厂设置的正常运行时间,而不是上次重新启动的正常运行时间。但是,如果您正在存储一些数据并检查它是否在启动时被删除 - 它可能会起作用。

但是,我认为使用 BroadcastReceiver 来实现 BOOT_COMPLETED 是一个好主意。而且强行关闭后接收器被删除通常是错误的。它仅适用于代码接收者。

相反,您可以在清单中定义接收器 - http://developer.android.com/guide/topics/manifest/receiver-element.html 如果你愿意的话 - 每次重新启动都会执行它,无论发生什么。

祝你好运


0
投票

您在清单中定义权限时遇到问题。 它应该看起来像这样:

<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 块中定义应用程序的权限。您添加到广播的权限 - 它不会为您添加接收它的权限,它只是强制任何其他可以触发您的广播的应用程序拥有此权限。对你来说没用。

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.