android - 如何借助广播接收器检测来电?

标签 android broadcastreceiver phone-call

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

这是我的代码:

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();
        }
}       

我的 list 文件:

<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 非常陌生,所以请帮助我。

最佳答案

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,因此,如果您发出显式 Intent,您的 if 将不会被执行。

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

关于android - 如何借助广播接收器检测来电?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257649/

相关文章:

java - xml 中的自定义值

android - Intents发送后是否在排队?

android - 全局广播接收器(Android)

ios - Objective-C iOS7检测事件的电话和麦克风可用性

android - 如何在android中以编程方式更改应用程序小部件中的图像

android - v19/v21 中的重复样式

java.lang.IllegalArgumentException : column '_id' does not exist with Ormlite cursor 异常

android - 应用程序关闭时警报管理器不工作

android - 需要让 Android 应用程序在检测到电话时停止 MediaPlayer 的声音

ios - 收到来电的后台通知?