10

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

理解するために以下の画像を参照してください。

ここに画像の説明を入力してください

電話をかけるときに番号を取得できますか?はいの場合、どうすればよいですか?

4

2 に答える 2

6

これらのソリューションを使用してみてください。また、これを参照してください

   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();
         }
      }
   }
}
于 2012-06-02T06:41:33.537 に答える
6

ねえ最後に私はそのための解決策を手に入れました..このようにあなたもそれを得ることができます。

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" />
于 2012-06-05T07:42:11.250 に答える