2017-03-17 5 views
2

特定の条件が発生したときにアプリケーションが確認できるフラグを設定したいとします。私は、この 'フラグ'がシステムの再起動時に自動的に削除されるようにします。複数のアプリケーションを再起動してもこのフラグを保持する必要があります。Androidの一時的なプロパティを設定する

最初に試したのはSystem.setProperty("flag", "true")でしたが、アプリの再起動後にSystem.getProperty()を実行すると、このフラグはもう設定されていません。

私が持っていた別の考えは、条件が発生したときにファイルを作成することでした。その後、アプリケーションが再起動すると、このファイルが存在するかどうかを確認できます。また、システムを再起動したときにBootReceiverを使用してファイルを消去することもできます。この問題は、BootReceiverが実行される前にこのファイルのチェックが行われていることが原因で発生する可能性があります。

あなたが考えることができるより簡単なメカニズムがありますか?キャッシュファイルを使ってSharedPreferencesと内部ストレージを調べましたが、動作するとは思いません。

答えて

0

私はSharedPreferencesと共にブートブロードキャストレシーバを使用します。 システムが起動したら、変数をリセットしてSharedPreferencesに保存します。

マニフェストにこれを追加します。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

もこの:私はこれを試してみました

public class BootReciever extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     mSharedPreferences.putBoolean("yourVariable", true).apply(); 
    } 
} 
+0

<receiver android:name=".BootReciever"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> 

最終あなたはbroadcastReceiverを作成する必要があります。 3番目の段落を読んでください。この問題は、フラグのチェックがアプリケーションの起動時であり、BootReceiverが実行される前に行われる可能性があることです。 – artvandelay

+0

私の悪い、申し訳ありませんが、これは(ルート権限なしで)これを行う唯一の方法だと思います。ブートレシーバーから信号を受け取る前にこのチェックがどのように起こるのか説明してください。 – mayosk

+0

このチェックは、BootReceiverの前に実行されるApplication.onCreate()で行われます。 – artvandelay

関連する問題