2017-01-31 2 views
0

Я пытался обрабатывать входящие звонки, чтобы отменить или ответить на него, но я не могу. я использовал этот кусок кодаXamarin: Как бороться с ACTION_ANSWER Activity

[BroadcastReceiver(Label = "Blocking Calls")] 
[IntentFilter(new string[] { "android.intent.action.PHONE_STATE" })] 
public class MyReceiver : Android.Content.BroadcastReceiver 
{ 
    private const string IntentAction_BlockingCalls = "android.intent.action.PHONE_STATE"; 

    public override void OnReceive(Context context, Intent intent) 
    { 
     if (intent.Action == IntentAction_BlockingCalls) 
     { 
      // ensure there is information 
      if (intent.Extras != null) 
      { 
       // get the incoming call state 
       string state = intent.GetStringExtra(TelephonyManager.ExtraState); 

       // check the current state 
       if (state == TelephonyManager.ExtraStateRinging) 
       { 
        // read the incoming call telephone number 
        string telephoneNumber = intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber); 

        Intent buttonDown = new Intent(Intent.ActionMediaButton); 
        buttonDown.PutExtra(Intent.ActionView, new KeyEvent(KeyEventActions.Down, Keycode.Headsethook)); 
        context.SendBroadcast(buttonDown); 

        Toast.MakeText(context, telephoneNumber, ToastLength.Short).Show(); // Flag 4   
        // check the read telephone 
        if (string.IsNullOrEmpty(telephoneNumber)) 
         telephoneNumber = string.Empty; 
       } 
       else if (state == TelephonyManager.ExtraStateOffhook) 
       { 
        // Toast.MakeText(context, "The call is answered", ToastLength.Short).Show(); // Flag 5 
        // incoming call answer 
       } 
       else if (state == TelephonyManager.ExtraStateIdle) 
       { 
        // Toast.MakeText(context, "The call have ended", ToastLength.Short).Show(); // Flag 6 
        // incoming call end 
       } 
      } 
     } 
    } 
} 

Принести входящий номер телефона успешно, но я не могу ответить или отменить it.So, я пытался использовать это действие (ActionAnswer) ниже

Intent A = new Intent(Intent.ActionAnswer); 

И поскольку он появляется на этом скриншоте с сайта разработчика Android image вывод и вход ничего! Как я могу справиться с этим действием? или есть какие-либо другие методы, которые я могу использовать для отмены входящих вызовов? Спасибо за консультацию. Вот ссылка разработчика Android. https://developer.android.com/reference/android/content/Intent.html#ACTION_ANSWER

+0

Что вы пытаетесь сделать? Это должно дать людям больше возможностей для ухода. –

+0

Что вы пытаетесь сделать? действие, используемое для обработки входящего вызова. Вы пытаетесь назвать операцию намерения кодом? –

+0

Хорошо, я изменил тело вопроса. – mostafayasin

ответ

0

Наконец-то я нашел решение, и он отлично работает со мной. Это та часть, которая нам нужна.

// check the current state 
       if (state == TelephonyManager.ExtraStateRinging) 
       { 
        // read the incoming call telephone number 
        string telephoneNumber = intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber); 

        // You can use Endswith, Equals, or any other available methods 
        //if (telephoneNumber.EndsWith("604")) 
        if (telephoneNumber.Equals("01282790604")) 
        { 
         var manager = (TelephonyManager)context.GetSystemService(Context.TelephonyService); 

         IntPtr TelephonyManager_getITelephony = JNIEnv.GetMethodID(
           manager.Class.Handle, 
           "getITelephony", 
           "()Lcom/android/internal/telephony/ITelephony;"); 

         IntPtr telephony = JNIEnv.CallObjectMethod(manager.Handle, TelephonyManager_getITelephony); 
         IntPtr ITelephony_class = JNIEnv.GetObjectClass(telephony); 
         IntPtr ITelephony_endCall = JNIEnv.GetMethodID(
           ITelephony_class, 
           "endCall", 
           "()Z"); 
         JNIEnv.CallBooleanMethod(telephony, ITelephony_endCall); 
         JNIEnv.DeleteLocalRef(telephony); 
         JNIEnv.DeleteLocalRef(ITelephony_class); 


         Toast.MakeText(context, telephoneNumber + "Is Blocked", ToastLength.Long).Show(); 
        } 
Смежные вопросы