2011-12-18 10 views
0

私が達成したいのは、ユーザーに「Start broadcast receiving」と「Stop broadcast receiving」と言うボタンを与えることです。Persisting BroadcastReceiverリファレンス

私は(機能 'をスタート放送受信') "android.provider.Telephony.SMS_RECEIVED" の意図のためにBroadcastReceiverを登録してい

incomingSmsReceiver = new IncomingSmsReceiver(); 
IntentFilter filter = new IntentFilter(); 
filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
getApplicationContext().registerReceiver(incomingSmsReceiver, filter); 

その後、私はストップ放送」のunregisterReceiver()を使用しています受信: '

getApplicationContext().unregisterReceiver(incomingSmsReceiver); 

ご覧のとおり、同じ参照(private static BroadcastReceiver incomingSmsReceiver;)を使用しています。

問題がある:

これは、限り、私のアプリのプロセスが終了しないと正常に動作します。ユーザーが「ブロードキャストの受信を開始」をクリックした後、私のアプリがAndroidによって殺されたとき、私はincomingSmsReceiverの参照を失っています(私のアプリを次に実行すると、デフォルトでnullに設定されます)。リファレンスが失われているため、ユーザーがブロードキャストの受信を停止する方法はありません。

この参照を維持する方法そして、getApplicationContext().unregisterReceiver(incomingSmsReceiver);にAndroidでアプリのプロセスを再作成した後に電話をかける方法を教えてください。

答えて

0

AFAIKの場合、まったく同じBroadcastRecieverリファレンスを保持する必要はありません。通常と同じ方法で新しい参照を作成し、unregisterServiceに渡します。

+0

しかし、 'public abstract void unregisterReceiver(BroadcastReceiver receiver)'メソッドの意図とは関係ありません。 BroadcastReceiverリファレンスのみを取得します。 – ncreated

+0

@回帰:答えを更新しました!間違いをおかけして申し訳ありません。 –