Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我在broadcastreceiver类中实现了这段代码,以通知用户在收费时没有接听电话。。。。但它不起作用_Android_Android Intent_Android Context_Telephonymanager_Android Broadcastreceiver - Fatal编程技术网

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)){