将BroadcastReceiver中的值传递给活动

时间:2011-11-18 13:45:29

标签: android broadcastreceiver

我使用以下代码来获取电话号码。我将数字存储在一个静态变量中。当我尝试在另一个活动中使用该变量时,它会抛出NullPointer异常。

package com.income;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

public class IncomingCallReceiver extends BroadcastReceiver {
    static String info = null;
    static String phonenumber;

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Bundle bundle = intent.getExtras();
        if (null == bundle)
            return;
        Log.i("IncomingCallReceiver", bundle.toString());
        String state = bundle.getString(TelephonyManager.EXTRA_STATE);
        Log.i("IncomingCallReceiver", "State: " + state);
        if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) {
            phonenumber = bundle
                    .getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
            // String d=bundle.getString(TelephonyManager.EXTRA_STATE_IDLE)
            Log.i("IncomingCallReceiver", "Incomng Number: " + phonenumber);
            info = phonenumber;
        }
        if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) {
            Toast.makeText(context, info, Toast.LENGTH_LONG).show();
            Intent intent1 = new Intent(context, MissedCall.class);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);
        }
    }

}

2 个答案:

答案 0 :(得分:0)

基于您获得NullPointerException这一事实,这意味着捆绑包为null,这使得pone编号为空。

我建议你看看如何获​​取来电者的电话号码(here),就像在这篇文章中所做的一样。

修改

我所看到的是,您从未将电话号码存储在启动活动的意图中,因此您永远不会获得所述活动的电话号码。现在,intent1.putExtra("phoneNumber", phoneNumber);中的电话号码不为空,请尝试使用BroadcastReciever,并使用MissedCall.classintent.getExtras("phoneNumber");检索{{1}},并尝试获取该号码。

答案 1 :(得分:0)

检查你的intent.putstring()方法