安卓手机:无法检测呼出号码

3

我无法检测到呼出号码,每次尝试从设备拨打电话时都会出现空指针异常。我想要检测呼出的电话号码。请给予建议,我已经尝试了很多解决方案,但无法使其正常工作。空指针异常出现在这一行 -> Log.i("OutgoingCallReceiver",phonenumber);

12-07 16:10:50.576: ERROR/AndroidRuntime(3145): Caused by: java.lang.NullPointerException: println needs a message
12-07 16:10:50.576: ERROR/AndroidRuntime(3145):     at android.util.Log.println_native(Native Method)
12-07 16:10:50.576: ERROR/AndroidRuntime(3145):     at android.util.Log.i(Log.java:143)
12-07 16:10:50.576: ERROR/AndroidRuntime(3145):     at com.cwc.OutgoingCallReceiver.onReceive(OutgoingCallReceiver.java:27)
12-07 16:10:50.576: ERROR/AndroidRuntime(3145):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)
12-07 16:10:50.576: ERROR/AndroidRuntime(3145):     ... 10 more

这是我的类文件

public class OutgoingCallReceiver extends BroadcastReceiver {


// private static final String INTENT_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";

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

            if(null == bundle)
                    return;


            String phonenumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

            Log.i("OutgoingCallReceiver",phonenumber);
            Log.i("OutgoingCallReceiver",bundle.toString());

            String info = "Detect Calls sample application\nOutgoing number: " + phonenumber;

            Toast.makeText(context, info, Toast.LENGTH_LONG).show();
    }
}

我在清单文件中有以下条目

    <receiver android:name=".OutgoingCallReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>

</application>

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_CONTACTS" />
2个回答

1
解决了,我缺少了“android.permission.PROCESS_OUTGOING_CALLS”用户权限。现在它可以工作了,这是我的更新后的清单文件。

1
在广播接收器的onReceive方法中,只需使用
Intent.EXTRA_PHONE_NUMBER从bundle中获取值。
String outgngphno = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

就是这样!!

在清单文件中

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

在广播接收器下方:
<intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接