Android 我在broadcastreceiver类中实现了这段代码,以通知用户在收费时没有接听电话。。。。但它不起作用
上面的代码是我为来电接收器实现的。答案很简单:您不能在Android 我在broadcastreceiver类中实现了这段代码,以通知用户在收费时没有接听电话。。。。但它不起作用,android,android-intent,android-context,telephonymanager,android-broadcastreceiver,Android,Android Intent,Android Context,Telephonymanager,Android Broadcastreceiver,上面的代码是我为来电接收器实现的。答案很简单:您不能在广播接收器中显示警报对话框。您必须启动一个活动(可能是一个透明的活动)来显示警报对话框,或者简单地显示Toast消息 编辑 我不确定是否可以在接到电话时显示活动。如果是的话,这不是一个好主意,因为您正在从您的设备将其覆盖在phonecall视图上 第二版 以下是如何实现来电接收器: 首先,为传入呼叫创建广播接收器: public class MyReceiver extends BroadcastReceiver { private
广播接收器中显示警报对话框。您必须启动一个活动
(可能是一个透明的活动)来显示警报对话框
,或者简单地显示Toast
消息
编辑
我不确定是否可以在接到电话时显示活动。如果是的话,这不是一个好主意,因为您正在从您的设备将其覆盖在phonecall视图上
第二版
以下是如何实现来电接收器:
首先,为传入呼叫创建广播接收器:
public class MyReceiver extends BroadcastReceiver {
private Context mcontext;
TelephonyManager telephonyManager =
(TelephonyManager) mcontext.getSystemService(Context.TELEPHONY_SERVICE);
public void onReceive(Context context, Intent intent) {
mcontext = context;
String action = intent.getAction();
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
// This code will execute when the phone has an incoming call
然后,在您的舱单中注册接收人:
public class YourIncommingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
try{
String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)){
//example from Android API
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
if(isCharging==true){
Toast.makeText(mContext,"PLEASE UNPLUG", Toast.LENGTH_LONG).show();
}
}
}
catch(Exception e)
{
//show error message
}
}
}
<receiver android:name=".YourIncommingCallReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
并在清单中添加权限:
public class YourIncommingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
try{
String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)){
//example from Android API
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
if(isCharging==true){
Toast.makeText(mContext,"PLEASE UNPLUG", Toast.LENGTH_LONG).show();
}
}
}
catch(Exception e)
{
//show error message
}
}
}
<receiver android:name=".YourIncommingCallReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
并在代码中删除此操作\u电源\u连接的接收器。这只会在设备连接或断开连接的情况下进行广播,而不会在接到电话时进行广播。这意味着什么:它不工作?错误是什么?您是否编写了AndroidManifest.xml意图过滤器?我生成了apk并在我的手机中进行了测试,但它没有通知..没有错误..我生成了apk,您也为您的toast调用了show()方法?在broadcastreceiver中是否可以检测传入和连接的动作,同时通知用户通常,具有多个动作的广播接收器工作,但这不是一个好主意,因为我认为它不够精确。相反,您应该检查设备是否以编程方式插入电话接收器。使用以下答案之一:它与您如何在清单中实现broadcastReceiver有关。在您的情况下,如果设备将被插入而不是在电话中,您将首先获得操作。你不应该这样做。仅注册传入呼叫接收器,并在此设备中以编程方式检查是否由设备负责…如果(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)){