2011-08-08 14 views
1

ユーザーがアプリを起動する回数をカウントする必要があります。私は共有の設定に値を格納しており、カウントロジックをonCreate()の内部に入れています。Android:カウントアプリの起動回数

onCreate()はさまざまなシナリオで呼び出されているため、実際にアプリケーションを起動するユーザーはすべて含まれていません。保存済みのインスタンス状態バンドルを使用して、OnSaveInstanceState()に設定されたフラグを格納しています私はユーザーが手動でアプリを起動したと考えます。

nullonCreate()に十分に渡されているかどうかを確認するだけですか?どちらの場合でも、なぜですか?

答えて

0

まずはお返事ありがとうございます。彼らはすべて何らかの方法で助けた。

しかし、いくつかの試行と異なるアプローチの後で、ユーザーがいつアプリを起動したかを実際に100%信頼できる方法で判断することはできないと思います。実際にアクティビティライフサイクルコールバックを使用することはできません。個別にも組み合わせても問題に取り組むことはできません。

最も近いのはonResume()コールの数を数えてから、isFinishing()の返信に応じてonPause()でそれを引き算することでした。しかし、このアプローチでは、ユーザーがアプリケーションを非表示にするために行うことができる、ホームボタンを説明していません。

これを確実に行う方法が見つかった場合は、この回答を更新します。

+0

有料になる前にあなたのアプリへのユーザーアクセスを制限しようとしている場合、記録したり制限したりできるアプリケーションとのやり取りはありますか? –

1

あなたはこの別の方法について考えることができます... onDestroy()が呼び出されるたびにカウンタをインクリメントします。この方法では、プログラムが実際にメモリ不足であることが保証され、カウンタはたかだか1つだけオフになります。

ちょうどそこにアイデアを投げて、それがあなた自身のいくつかをもっと与えることを願ってください!

+2

カウンタが上昇しないようにしますか?バッテリーを引き出してください! – Rob

+0

彼らは私を脅かそうとしている!私はGOTTAが電池を引っ張る – Codeman

2

getCategories()を呼び出して、LAUNCHERカテゴリが含まれているかどうかを確認できます。

+0

ユーザーがアプリから離れて移動した後、再起動せずにLAUNCHERカテゴリーは含まれないでしょうか? – slezica

+0

残念ながら私は確信していませんが、テストするのは簡単でしょう。 –

+0

どのように?私の理解が進む限り、onCreateは再び呼び出されることもあれば呼び出されないこともあります - たぶんonResume、そうでないかもしれません。 – slezica

0

onCreateの方法の中には、Activity#getCallingActivityにチェックを入れてください。アプリが別のアクティビティから開始されなかった場合は、nullを返します。

1

nullチェックインonCreate()はうまく動作するはずです。 onSaveInstanceState()に別のフラグを設定する必要はありません。しかし、1つの可能な問題があります。

ユーザーがアプリケーションをバックグラウンドで(ホームキーを押して)置くとします。申請プロセスは最終的に殺されるでしょう。ユーザーがアプリケーションを再起動すると、フラグが設定されたonCreate()に適切なBundleオブジェクトが届きます。ユーザーは、毎回アプリケーションをバックグラウンドにするだけで、カウンターが増えないようにすることができます。

バックグラウンド化が問題になることができれば、あなたのような何かを試してみてください:私は前に上記のコードを使用していると、それはエクレア、フローズンヨーグルトやジンジャーブレッドで動作

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (getLastNonConfigurationInstance() == null) { 
     counter++; 
    } 
} 

public Object onRetainNonConfigurationInstance() { 
    return new Object(); 
} 

を。 getLastNonConfigurationInstance()onRetainNonConfigurationInstance()がHoneycombで非推奨となっているようですので、Honeycombをターゲットにしている場合にどのように動作するかはわかりません。

関連する問題