Получить номер во время звонка.

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

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

enter image description here

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

 Lucifer02 июн. 2012 г., 08:49
Попробуйте переопределитьCall кнопка на событие нажатия клавиши

Ответы на вопрос(2)

этот

   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();
         }
      }
   }
}
 02 июн. 2012 г., 08:44
Вы также можете отклонить вызов на любой заранее определенный номер, также указанный выше код, или удалить эти строки, чтобы узнать номер телефона.
Решение Вопроса

таким образом, вы также можете получить это.

Вы должны использовать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" />
 Mehul Patel04 мар. 2014 г., 17:15
Да, ты можешь....
 03 мар. 2014 г., 14:29
Этот метод требует, чтобы андроид был рутирован? Могу ли я написать это в обычном телефоне Android

Ваш ответ на вопрос