2012-06-02 2 views
10

電話をかける前に、キーパッドに任意の番号を入力してから、コールボタンを押すと、その番号をlogcatで取得したいとします。通話中にダイヤル番号を取得します。

以下を参照してください。

enter image description here

はい、その後どのようにすることができます場合、私は、呼び出しの時点で数を取得することはできますか?

+1

は、この方法が必要でくださいあなたはまた、電話番号 – Lucifer

答えて

5

を参照してください。これらのsolution.Alsoを使用してみてください...このような あなたもそれを得ることができます。

は、あなたはこのような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(); 
      } 
    } 

} 

そして、ああ、みんなは許可を追加することを忘れないでください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

を知るためにも、コードの上またはそれらの行を削除から任意の所定数の呼び出しを拒否することができ –

+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

KeyPressイベントに**通話**ボタンをオーバーライドしてくださいアンドロイドが根元にある これを普通のアンドロイド携帯で書くことができます –

関連する問題