2012-06-02 2 views
10

Когда я вводил номер на клавиатуре, и после того, как я нажимаю кнопку вызова перед вызовом телефона, я хочу получить этот номер набора в logcat.Извлечение номера набора при вызове.

См. Ниже Изображение для понимания.

enter image description here

Могу ли я получить номер во время вызова, если да, то как я могу?

+1

Попробуйте переопределяя ** вызова ** кнопка на событие нажатия клавиши – Lucifer

ответ

5

Эй Наконец я получил решение для этого .. , как это вы можете также получить это.

Вы должны использовать ITelephony.aidl файл, как это:

package com.android.internal.telephony; 

import android.os.Bundle; 
     interface ITelephony { 
     boolean endCall(); 
     void dial(String number); 
     void answerRingingCall(); 
     void abortCall(); 
    } 

И В OutgoingCallReceiver

public class OutgoingCallReceiver extends BroadcastReceiver { 

    Context context = null; 
    private static final String TAG = "Phone call"; 
    private ITelephony telephonyService; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 

     if (null == bundle) 
      return; 

     String phonenumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 

     Log.i("OutgoingCallReceiver", phonenumber); 
     Log.i("OutgoingCallReceiver", bundle.toString()); 

     String info = "Detect Calls sample application\nOutgoing number: "+ phonenumber; 
     /* System.out.println("value id:"+info); */ 
     Toast.makeText(context, info, Toast.LENGTH_LONG).show(); 

     TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     try { 
      Class c = Class.forName(telephony.getClass().getName()); 
      Method m = c.getDeclaredMethod("getITelephony"); 
      m.setAccessible(true); 
      /* 
      * com.android.internal.telephony.ITelephony telephonyService = 
      * (ITelephony) m.invoke(tm); 
      */ 
      telephonyService = (ITelephony) m.invoke(telephony); 
      telephonyService.answerRingingCall(); 
      telephonyService.endCall(); 
      telephonyService.dial(null); 
      telephonyService.abortCall(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

И если вы хотите, чтобы получить IncomingCallReceiver тогда, как это вы можете:

public class IncomingCallReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 

      if(null == bundle) 
        return; 

      Log.i("IncomingCallReceiver",bundle.toString()); 
      String state = bundle.getString(TelephonyManager.EXTRA_STATE); 
      Log.i("IncomingCallReceiver","State: "+ state); 
      if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)) 
      { 
        String phonenumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
        Log.i("IncomingCallReceiver","Incomng Number: " + phonenumber); 
        System.out.println("Coming in Incoming Number"+phonenumber); 
        String info = "Detect Calls sample application\nIncoming number: " + phonenumber; 
        Toast.makeText(context, info, Toast.LENGTH_LONG).show(); 
      } 
    } 

} 

И ya Ребята не забудьте добавить разрешение в AndroidManifest файл:

<receiver android:name="com.varma.samples.detectcalls.receivers.OutgoingCallReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
      </intent-filter> 
     </receiver> 
     <receiver android:name="com.varma.samples.detectcalls.receivers.IncomingCallReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> 
+0

ли этот метод требует андроид, который будет внедрен Могу ли я написать это в обычном телефоне Android –

+0

Да, вы можете ... –

6

Попробуйте использовать эти solution.Also см this

public class OutgoingCallReceiver extends BroadcastReceiver { 

    public static final String ABORT_PHONE_NUMBER = "1231231234"; 

    private static final String OUTGOING_CALL_ACTION = "android.intent.action.NEW_OUTGOING_CALL"; 
    private static final String INTENT_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     Log.v(Constants.LOGTAG, "OutgoingCallReceiver onReceive"); 
     if (intent.getAction().equals(OutgoingCallReceiver.OUTGOING_CALL_ACTION)) { 
     Log.v(Constants.LOGTAG, "OutgoingCallReceiver NEW_OUTGOING_CALL received"); 

     // get phone number from bundle 
     String phoneNumber = intent.getExtras().getString(OutgoingCallReceiver.INTENT_PHONE_NUMBER); 
     if ((phoneNumber != null) && phoneNumber.equals(OutgoingCallReceiver.ABORT_PHONE_NUMBER)) { 
      Toast.makeText(context, "NEW_OUTGOING_CALL intercepted to number 123-123-1234 - aborting call", 
        Toast.LENGTH_LONG).show(); 
      this.abortBroadcast(); 
     } 
     } 
    } 
} 
+0

вы также можете отклонить вызов для любого заданного количества также из выше кода или удалить эти строки, чтобы узнать номер телефона –

Смежные вопросы