Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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
Java 掉线来电_Java_Android_Android Broadcast - Fatal编程技术网

Java 掉线来电

Java 掉线来电,java,android,android-broadcast,Java,Android,Android Broadcast,我正在尝试阻止android中的来电。我有这个BroadcastReceiver,但它可以处理来电,但不会阻止我的android 2.3.6手机上的来电(没有在其他版本上尝试)。 这是我的听筒: public class PhoneCallReceiver extends BroadcastReceiver { Context context = null; private static final String TAG = "Phone call"; private I

我正在尝试阻止android中的来电。我有这个BroadcastReceiver,但它可以处理来电,但不会阻止我的android 2.3.6手机上的来电(没有在其他版本上尝试)。 这是我的听筒:

public class PhoneCallReceiver extends BroadcastReceiver {
    Context context = null;
    private static final String TAG = "Phone call";
    private ITelephony telephonyService;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v(TAG, "Receving....");

        TelephonyManager telephony = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        try {
            Class c = Class.forName(telephony.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);
            telephonyService = (ITelephony) m.invoke(telephony);
            // telephonyService.silenceRinger();

            telephonyService.endCall();
        } catch (Exception e) {
            Log.v(TAG, "failed....");
            e.printStackTrace();
        }    
    }    
}
还有ITelephony

package com.callblocker.mk;

interface ITelephony {

  boolean endCall();

  void answerRingingCall();

  void silenceRinger();

}

在广播接收器中调用此方法

 public static void disconnectPhoneItelephony(Context context) {
     ITelephony telephonyService;
     Log.v(TAG, "Now disconnecting using ITelephony....");
      TelephonyManager telephony = (TelephonyManager) 
      context.getSystemService(Context.TELEPHONY_SERVICE);  
      try {
          Log.v(TAG, "Get getTeleService...");
          Class c = Class.forName(telephony.getClass().getName());
          Method m = c.getDeclaredMethod("getITelephony");
          m.setAccessible(true);
          telephonyService = (ITelephony) m.invoke(telephony);
            telephonyService.endCall();
      } catch (Exception e) {
       e.printStackTrace();
       Log.e(TAG,
               "FATAL ERROR: could not connect to telephony subsystem");
       Log.e(TAG, "Exception object: " + e);
      }
 }
 @Override
public void onReceive(Context context, Intent intent) {


    if (!intent.getAction().equals("android.intent.action.PHONE_STATE")) 
         return;
     else {

         disconnectPhoneItelephony(context);
}}
//广播接收机

 public static void disconnectPhoneItelephony(Context context) {
     ITelephony telephonyService;
     Log.v(TAG, "Now disconnecting using ITelephony....");
      TelephonyManager telephony = (TelephonyManager) 
      context.getSystemService(Context.TELEPHONY_SERVICE);  
      try {
          Log.v(TAG, "Get getTeleService...");
          Class c = Class.forName(telephony.getClass().getName());
          Method m = c.getDeclaredMethod("getITelephony");
          m.setAccessible(true);
          telephonyService = (ITelephony) m.invoke(telephony);
            telephonyService.endCall();
      } catch (Exception e) {
       e.printStackTrace();
       Log.e(TAG,
               "FATAL ERROR: could not connect to telephony subsystem");
       Log.e(TAG, "Exception object: " + e);
      }
 }
 @Override
public void onReceive(Context context, Intent intent) {


    if (!intent.getAction().equals("android.intent.action.PHONE_STATE")) 
         return;
     else {

         disconnectPhoneItelephony(context);
}}
//显示

 <!-- BLOCK CALL -->
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.CALL_PHONE" />
 <uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />

<receiver android:name="receiver.CallReceiver" >
        <intent-filter android:priority="999" >
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
     </receiver>

我参加了一个关于Android上的反射的课程,具体的例子是程序性地结束一个呼叫,也就是说,如果不使用反射,你就不能这样做(这意味着taran的答案可能是正确的)