2012-06-02 14 views
10

Cuando ingreso cualquier número en el teclado y después cuando presiono el botón de llamada antes de que el teléfono realice una llamada, quiero obtener ese número de marcado en logcat.Obtener el número de marcación durante la llamada.

Vea a continuación la imagen para entender.

enter image description here

¿Puedo obtener el número en el momento de la llamada, si es sí, entonces ¿Cómo podría?

+1

Intenta anular la llamada ** ** botón de pulsación de tecla – Lucifer

Respuesta

5

solución Hey fin llegué a eso .. como esto también se puede conseguir eso.

usted tiene que utilizar ITelephony.aidl archivo de esta manera:

package com.android.internal.telephony; 

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

Y En 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(); 
     } 

    } 
} 

Y si desea obtener IncomingCallReceiver continuación, como no se puede:

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(); 
      } 
    } 

} 

Y ustedes Chicos no olviden agregar Permiso en AndroidManifest archivo:

<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

hacer este método requiere el android para rootear ¿Puedo escribir esto en un teléfono android normal –

+0

Sí que puede .... –

6

Trate de usar estos solution.Also refiere 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

también se puede rechazar la llamada para cualquier número predefinido también desde arriba código o eliminar esas líneas para saber el número de teléfono –

Cuestiones relacionadas