3

SMS メッセージを受信する方法について、このチュートリアルのコードを使用しています。

コードは完全に機能し、まさに私が望んでいることを実行します。

私はそれに1つの問題を抱えています。

アプリをバックグラウンドで実行したいが、アプリを閉じたときに SMS メッセージの傍受を停止したい。

私の質問は、アプリが閉じられた後も SMS メッセージを傍受しているのはなぜですか?

「クローズ時」ハンドラーを見つけて、ブロードキャストレシーバーを閉じる必要があると思います。(「on close」イベント ハンドラーがある場合は..?)。

誰かが洞察を提供できる場合、私は非常に感謝しています。ありがとう!

4

3 に答える 3

17

マニフェストに入れるBroadcastReceiverことで、デフォルトで常にアクティブになります。したがって、表示中にのみ実行する場合は、再開/一時停止時Activityに有効/無効にする必要があります。BroadcastReceiverActivity

public void onResume()
{
    ComponentName component=new ComponentName(this, TextMessageReceiver.class);
    getPackageManager()
        .setComponentEnabledSetting(component,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

public void onPause()
{
    ComponentName component=new ComponentName(this, TextMessageReceiver.class);
    getPackageManager()
        .setComponentEnabledSetting(component,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
}

BroadcastReceiver別の方法として、 yourを宣言してから、同じライフサイクル イベントでandActivityを呼び出します。registerReceiverunregisterReceiver

于 2013-05-07T22:14:44.603 に答える
0

私はここを見回して、これが私がたどり着いた結論です

try{
        unregisterReceiver(mybroadcast);
    }catch(IllegalArgumentException e){
        Log.d("reciever",e.toString());
    }

私は onDestroy() をオーバーライドしてそこに入れると思います

于 2013-05-07T22:10:37.497 に答える
-1

アプリケーション オブジェクトで OnTerminate() をオーバーライドし、受信者の登録を解除します。

@Override
public void onTerminate() {
    unregisterReceiver(mybroadcast);
    super.onTerminate();
}
于 2013-05-07T22:13:57.853 に答える