1

アプリのスプラッシュ スクリーンの横に、ヒント ページというアクティビティを表示する必要があります。このアクティビティは 1 日 1 回表示されます。ユーザーが 24 時間以内にアプリを再度開くと、表示されません。

最初に現在の日付に基づいて表示しようとしました。最初にアクティビティが表示されstore the current date in shared preferenceたとき、次にアプリが開かれたときに. 等しい場合はアクティビティを表示しません。そうでない場合はアクティビティを表示します。checkcurrent date and date in shared preference are equal or not

しかし、ここでは論理的な間違いがあります。ユーザーが最初に日付の午後 11 時の真夜中にアプリを開き、t 時間後に再びアプリを開くと、ヒント アクティビティが表示されますが、24 時間後にそれを表示する必要があります。それはできますか。pls はこの ligic で私を助けて

4

3 に答える 3

1

私はあなたがそのような流れを必要としていると思います、これを見てくださいジェイソン・ヘスリーの答えの実装

 SharedPreferences settings = getSharedPreferences("Preferences",
            MODE_PRIVATE);

    long timeFromPrefs = settings.getLong("time", System.currentTimeMillis());
    final long TIME_DIFF = 24*60*60*1000; 


    if ((System.currentTimeMillis()-timeFromPrefs)>TIME_DIFF) {
        // show Activity...........
        Editor editor = settings.edit();
        editor.putLong("time", System.currentTimeMillis());
        editor.commit();

    } 
于 2012-11-09T04:44:01.760 に答える
1

Android アプリケーションは、android.os.Handler & java.lang.Runnable クラスを使用して定期的なタイマーを実行できます。簡単な例を以下に示します。

キーポイント 1. android.app.Service を拡張するサービス クラスは、onBind、onCreate & onDestroy、ライフサイクル メソッドを実装する必要があります。2. periodTask は、スレッドを実行する Runnable 実装のインスタンスです。run() を実行すると、「Awake」というメッセージが出力されます。3. mHandler は、periodicTask スレッドにアタッチされた Handler のインスタンスです。4. ハンドラーは、postDelayed によって、毎分スレッドを実行するように通知されます。5. サービスが破棄されると、removeCallbacks を呼び出して、periodicTask インスタンスが Handler から削除されます。

サンプルコード

public class PeriodicTimerService extends Service {
    private Handler mHandler = new Handler();
    public static final int ONE_DAY = 86400000;
    private Runnable periodicTask = new Runnable() {
        public void run() {
            Log.v("PeriodicTimerService","Awake");
            mHandler.postDelayed(periodicTask, ONE_DAY );
        }
    };

   @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        mHandler.postDelayed(periodicTask, ONE_DAY );
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mHandler.removeCallbacks(periodicTask);
        Toast.makeText(this, "Service onDestroy() ", Toast.LENGTH_LONG).show();
    }
}
于 2012-11-09T03:10:18.183 に答える
0

質問で述べたように、共有設定でアクティビティが最後に開始された時間を保存します。次に、現在の時刻から前回の時刻を引きます。24 時間を超える場合は、ヒントを示してください。

于 2012-11-09T02:52:36.490 に答える