【问题标题】:How to detect incoming call with the help of Broadcast Receiver?如何在广播接收器的帮助下检测来电?
【发布时间】:2013-03-06 20:46:04
【问题描述】:

我正在尝试通过广播接收器识别来电。我不能这样做!事实上,我无法“触发”广播!

这是我的代码:

activate.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                Toast.makeText(getApplicationContext(),"Clicked",1).show();
                final String BROADCAST_ACTION_NAME = ".BroadcastMM";
                Intent intent = new Intent();  
                intent.setAction(BROADCAST_ACTION_NAME);        
                sendBroadcast(intent); 


            }                                           
            }

我不知道这个“sendBroadcast”是否被触发过!在我的广播接收器文件中:

public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction()=="android.intent.action.PHONE_STATE"){
        Toast.makeText(c,"BroadCast fired!",1).show();}
        Bundle extras = intent.getExtras();
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            Toast.makeText(context, "Ringing", 1).show();
        }
}       

我的清单文件:

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

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

我缺少一些逻辑吗?我对 Android 很陌生,所以请帮帮我。

【问题讨论】:

    标签: android broadcastreceiver phone-call


    【解决方案1】:
    intent.getAction()=="android.intent.action.PHONE_STATE"
    

    应该是

    TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction());
    

    因为这是您比较字符串的方式(与equals())。

    此外,您用于广播的代码不应该广播 - 没有 ".BroadcastMM" 操作。尝试制作一个明确的:

     Intent intent = new Intent(v.getContext(),BroadcastMM.class);  
     sendBroadcast(intent);
    

    也有可能你不能广播android.intent.action.PHONE_STATE,所以你的if如果你做了一个显式的Intent就不会被执行。

    如果您真的想检查您的 BroadcastReceiver 是否正常工作,请将打印输出/Toasts 放在所有 if 之外。然后,一旦您确定 BroadcastReceiver 响应,请进行检查。但请记住,由于您只侦听一个 Intent-Filter,因此 if 检查 Intent 是否为 PHONE_STATE Intent 有点多余。

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多