2

すべての発信通話をリッスンするブロードキャスト レシーバーがあります。別のアクティビティでは、電話をかけます。私の BC では、どの呼び出しがアクティビティで作成されたかを判断できるようにしたいのでputExtras()、呼び出しを行うときにマーカー フィールドを配置します。問題は、onReceive()BC で余分なデータ フィールドがまったく表示されない (null を返す) ことです。

関連するアクティビティ コードは次のとおりです。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        appGlobal gState = (appGlobal)getApplicationContext();
        dh = gState.getSqlDataHelper();
        Bundle extras = getIntent().getExtras(); 
        if(extras != null)
        {
            phoneNumber = extras.getString("number");
        }
        makePhoneCall();
        finish();
    }

private void makePhoneCall()
    {

        if (phoneNumber.length() < 1) {
            return;
        }
        String url = "tel:" + phoneNumber;
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
        intent.putExtra("number", "bla");

        startActivity(intent);
    }

関連する BC コードは次のとおりです。

public class CallMeNotServiceCallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();

        if (intent.getStringExtra("number") != null)
        { Log.w("bla", "HAS KEY!!!"); }
...

この状況には PendingIntent が必要ですか?

4

2 に答える 2

2

公式のBroadcastReceiver API リファレンスには、次のように明確に記載されています (3 番目の段落)。

[...] インテント ブロードキャスト メカニズムは、アクティビティの開始に使用されるインテントとは完全に分離されています。BroadcastReceiver が startActivity() で使用されるインテントを表示またはキャプチャする方法はありません。[...]

Jason と HellBoy が提案したように、makePhoneCall() でアクティビティを開始する代わりに、BroadcastReceiver に Broadcast を送信すると、Activity が開始されます (もちろん、余分なマーカーが含まれている場合のみ)...

于 2011-02-22T12:59:12.603 に答える
1

ログを追加すると、BroadcastReceiver が実際にまったく呼び出されないことがわかりますか?

sendBroadcast(intent)BroadcastReceiver が受信する Intent を送信するために使用します。現在使用しstartActivityているのは、特定の Activity クラスを持つ Intent が開始されることを期待しています。

于 2011-02-03T03:29:17.333 に答える