2011-12-14 9 views
3

私のアプリケーションでは、2時間無料、1日、1週間などの異なる計画に基づいてアプリケーションを購入させていただきます。有効期限が切れた後にユーザーにアプリケーションを使用させない方法はありますか?

私は、有効期限が過ぎてもアプリケーションを使用しないようにしたいと考えています。私はサービスを作り、主な活動に警報を立て、勤務時間外に主活動を開いたと言いました。

主な活動にアラームを設定するコード:

private void updateService(){ 
     Intent myIntent = new Intent(DRMActivity.this, AlarmService.class); 
     pendingIntent = PendingIntent.getService(DRMActivity.this, 0, myIntent, 0); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.add(Calendar.SECOND, 30); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

     Toast.makeText(DRMActivity.this, "Start Alarm", Toast.LENGTH_LONG).show(); 
    } 

サービスのコード:

@Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 

     Intent myIntent = new Intent(getBaseContext(), DRMActivity.class); 
     myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     Toast.makeText(this, "AlarmService.onStart()", Toast.LENGTH_LONG).show(); 

     getApplication().startActivity(myIntent); 
    } 

これまでのところ、すべてが私の主な活動が破壊されても、OKです、サービスはそれを実行することができます再び。しかし、私はアンドロイドでは、残念なことに、アプリケーションはいくつかのアクティビティから構築されていると考えています。したがって、アクティビティからアプリケーションを停止することはできません。私が意味したのは? アクティビティを終了するfinish()メソッドがありますが、アプリケーション全体を閉じることはできません。したがって、アプリケーションのアクティビティを終了した後、そのアプリケーションの以前のアクティビティが表示されます。

私の話に戻ってください。例えば30秒後(上記のコードに従う)サービスは私の主な活動を実行します。しかし、ユーザーが簡単に戻るボタンをクリックすればどうなるでしょうか?彼は以前のアプリケーション活動に戻り、彼の使用を継続することができます。

共有プリファレンスを作成し、サービスでフラグを変更し、各アクティビティのonStart()でチェックします。私はそれが動作すると思いますが、悪いことは、他のプロジェクトに追加する必要があるラッパーに取り組んでおり、他の開発者にこれを追加したり、チェックしたりすることはできません。

あなたの提案は何ですか?有効期限が過ぎてもユーザーがアプリケーションを使用し続けることを許さないようにするにはどうしてですか?

=======> UPDATE:今後の参考のため

。私はFLAG_ACTIVITY_CLEAR_TOPを使用し、問題は解決されます。今、ユーザーが戻るボタンをクリックしても、メインアクティビティと最終アクティビティ間のすべてのアクティビティがクリアされます。そのマニュアルによると:

設定、およびアクティビティが起動された場合

が既に、 現在のタスクで実行中の代わりに、その 活動の新しいインスタンスを起動され、他の活動のすべての意志その上に このインテントは、新しいインテントとして という古いアクティビティに配信されます。例えば

、活動からなるタスクを考慮する:A、B、C、D Dは活性Bの 成分に解決を意図してstartActivity()を呼び出す場合、C及びDは、完成したであろうA、Bの

答えて

0

三つの可能性:何もしないように

  1. オーバーライドonBackPressed()とBがあることになりましたスタックで、その結果、与えられたテント を受けます。
  2. をバックスタックから削除するには、元々起動していたIntentFLAG_ACTIVITY_NO_HISTORYflagを追加します。
  3. 一部のデータをSharedPreferencesにコミットし、ユーザーが戻ったときにonResumeにチェックしてください。データに有効期限が切れていると表示されたら、機能を無効にします。
+0

ありがとうございましたLuxuryMode。あなたの2番目の提案は本当に便利でしたが、そのフラグの代わりに私の場合はより適切なFLAG_ACTIVITY_CLEAR_TOPを使用しました。 – Hesam

関連する問題