用于识别来电的Android应用

时间:2012-09-13 14:13:14

标签: android broadcastreceiver

我正在尝试创建一个可以拨打和接听电话和短信的应用 传出部分效果很好。 我使用广播接收器来接听来电。 当我试图调试它时,它不会在来电时加入onReceive函数。

这是我们的manifest.xml

    <receiver android:name=".MYPhoneStateListener"
       android:exported="true">
    <intent-filter android:priority="999999"> 
        <action android:name="android.intent.action.PHONE_STATE"></action> 
    </intent-filter> 

</receiver> 

</application>

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />    

这是广播接收器:

    public class CallBroadcastReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
    {
        Log.d("incoming", "incoming");
    }
}

}

有什么问题? 是否还有其他方式来表达呼叫接收者?

3 个答案:

答案 0 :(得分:0)

更改接收者的名称以匹配您在清单文件中定义的名称。

<receiver android:name=".CallBroadcastReceiver"
       android:exported="true">

答案 1 :(得分:0)

您可以尝试实现以下手机监听器:

public class PhoneListener extends PhoneStateListener {

    @Override
public void onCallStateChanged(int state, String incomingNumber) {
    }

}

状态可以是:TelephonyManager.CALL_STATE_RINGING,TelephonyManager.CALL_STATE_OFFHOOK,TelephonyManager.CALL_STATE_IDLE

在广播接收器中注册听众:

TelephonyManager telephony = (TelephonyManager)    ctx.getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

答案 2 :(得分:0)

在清单文件中添加以下权限。

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