1

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

3 回答 3

2

对于任何达到此目标的人实际上正在寻找标题问题的答案:

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

long curTime = System.currentTimeMillis();
long installTime = getPackageManager().getPackageInfo("com.android.providers.applications", 0).firstInstallTime;
long timeDiff = curTime - installTime;
于 2013-07-10T15:04:15.630 回答
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 块中定义您的应用程序的权限。以及您添加到广播的权限 - 它不会添加您接收它的权限,它只是强制任何其他可以触发您的广播的应用程序拥有此权限。在你的情况下没用。

希望能帮助到你

于 2012-09-03T08:30:30.367 回答
0

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

但是,我认为将 BroadcastReceiver 用于 BOOT_COMPLETED 是一个好主意。并且在强制关闭后删除接收器通常是错误的。它仅适用于来自代码的接收器。

相反,您可以在 Manifest 中定义您的接收器 - http://developer.android.com/guide/topics/manifest/receiver-element.html 如果您愿意 - 它将在每次重启时执行,不管任何事情。

祝你好运

于 2012-09-03T06:48:55.453 回答