2012-06-02 84 views
10

当我在键盘上输入任何号码时,以及在手机拨打电话之前按下呼叫按钮后,我想在logcat中获得该拨号号码。拨打电话时拨打电话号码。

请参阅下图了解。

enter image description here

我能得到数量在调用的时候,如果是,那么我怎么可以?使用这些solution.Also

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

} 

并且你们不要忘记在添加权限文件:

<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的根源 我可以在普通的Android手机中写这个 –

+0

是的,你可以.... –

6

尝试参照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

你也可以拒绝接听任何预定数量也从上面的代码或删除那些行知道电话号码 –