キーパッドに任意の番号を入力し、電話をかける前に通話ボタンを押した後、logcatでそのダイヤル番号を取得したいと思います。
理解するために以下の画像を参照してください。
電話をかけるときに番号を取得できますか?はいの場合、どうすればよいですか?
キーパッドに任意の番号を入力し、電話をかける前に通話ボタンを押した後、logcatでそのダイヤル番号を取得したいと思います。
理解するために以下の画像を参照してください。
電話をかけるときに番号を取得できますか?はいの場合、どうすればよいですか?
これらのソリューションを使用してみてください。また、これを参照してください
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();
}
}
}
}
ねえ最後に私はそのための解決策を手に入れました..このようにあなたもそれを得ることができます。
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" />