2

Android アプリで着信をブロック/ブロック解除したい。以下のコードを使用してそれを行うことができます。

telephony = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
customPhoneListener = new PhoneCallStateListener(MainActivity.this, vSMS);
start.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        telephony.listen(customPhoneListener, 
                         PhoneStateListener.LISTEN_CALL_STATE);
        Toast.makeText(MainActivity.this, "START", Toast.LENGTH_SHORT).show();
    }
});

stop.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        telephony.listen(customPhoneListener,
                         PhoneStateListener.LISTEN_NONE);
        Toast.makeText(MainActivity.this, "STOP", Toast.LENGTH_SHORT).show();
        }
    });
}

しかし、問題は、開始ボタンをクリックすると、コール ブロッキング サービスがアクティブになり、ホームページに移動しても、コール ブロッキングがまだアクティブ モードになっていることです (問題ありません)。しかし、アプリを開いて停止ボタンを押すと、通話のブロックが解除されません。それでもブロックされました。なぜ?私は何を間違っていますか?

4

1 に答える 1

1

アクティビティ コンテキストを使用して電話オブジェクトを取得していますが、これはアクティビティのcustomPhoneListenerインスタンス変数として定義されていると思います。

ただし、(ホーム画面に移動して) アクティビティを閉じて再度開くと、新しいコンテキストが作成されるため、停止ボタンはほとんど何もしません。

これを解決するには、次のことを試してください。

1- ユーザー アプリケーション コンテキスト

telephony = (TelephonyManager)  getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

2-アクティビティではなくcustomPhoneListener、アプリケーションのライフサイクル中にリスナーオブジェクトが同じであることを確認してください。で作成または定義してみてくださいstaticapplication class

于 2013-02-09T11:00:51.457 に答える