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

最後の再起動ではなく、工場出荷時設定へのリセットからの稼働時間をどのように計算したいのかよくわかりません。ただし、データの一部を保存していて、起動時に消去されたかどうかを確認する場合は、機能する可能性があります。

ただし、ここでは BOOT_COMPLETED に BroadcastReceiver を使用することをお勧めします。また、強制終了後にレシーバーが削除されるというのは一般的に誤りです。コードからの受信者にのみ適用されます。

代わりに、マニフェストでレシーバーを定義できます- http://developer.android.com/guide/topics/manifest/receiver-element.html そうすれば、何に関係なく、再起動するたびに実行されます。

幸運を

于 2012-09-03T06:48:55.453 に答える
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 に答える