android-如何在广播接收器的帮助下检测来电?
作者:互联网
我正在尝试通过广播接收器识别传入的呼叫.我无法这样做!实际上,我无法“触发”广播!
这是我的代码:
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,因此请帮帮我.
解决方法:
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是否正常工作,请将打印输出/ Toasts放在所有ifs之外.然后,一旦确定BroadcastReceiver响应,请进行检查.不过请记住,由于您仅侦听一个Intent-Filter,因此检查Intent是否为PHONE_STATE Intent的if有点多余.
标签:android,broadcastreceiver,phone-call 来源: https://codeday.me/bug/20191011/1891802.html