Android接听、挂断电话

时间:2023-03-09 21:16:44
Android接听、挂断电话

新建一个名为ITelephony的aidl文件,注意包名不能改变,因为是通过反射方式来实现接听和挂断的

aaarticlea/png;base64,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" alt="" />


ITelephony.aidl
package com.android.internal.telephony;
interface ITelephony{
boolean endCall();
void answerRingingCall();
} public class CallManager {
private static CallManager instance = null; private static final String MANUFACTURER_HTC = "HTC"; public static synchronized CallManager getInstance() {
if (instance == null) {
instance = new CallManager();
}
return instance;
} /** 接听电话*/
public void acceptCall(Context context) {
try {
Method method = Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class);
IBinder binder = (IBinder) method.invoke(null, new Object[]{Context.TELEPHONY_SERVICE});
ITelephony telephony = ITelephony.Stub.asInterface(binder);
telephony.answerRingingCall();
} catch (Exception e) {
Log.e(TAG, "for version 4.1 or larger");
acceptCall_4_1(context);
}
} /**4.1版本以上接听电话*/
public void acceptCall_4_1(Context context) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
;
//模拟无线耳机的按键来接听电话
// for HTC devices we need to broadcast a connected headset
boolean broadcastConnected = MANUFACTURER_HTC.equalsIgnoreCase(Build.MANUFACTURER)
&& !audioManager.isWiredHeadsetOn();
if (broadcastConnected) {
broadcastHeadsetConnected(context, false);
}
try {
try {
Runtime.getRuntime().exec("input keyevent " +
Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
} catch (IOException e) {
// Runtime.exec(String) had an I/O problem, try to fall back
String enforcedPerm = "android.permission.CALL_PRIVILEGED";
Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(
Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_HEADSETHOOK));
Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(
Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_HEADSETHOOK));
context.sendOrderedBroadcast(btnDown, enforcedPerm);
context.sendOrderedBroadcast(btnUp, enforcedPerm);
}
} finally {
if (broadcastConnected) {
broadcastHeadsetConnected(context, false);
}
}
} private void broadcastHeadsetConnected(Context context, boolean connected) {
Intent i = new Intent(Intent.ACTION_HEADSET_PLUG);
i.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
i.putExtra("state", connected ? 1 : 0);
i.putExtra("name", "mysms");
try {
context.sendOrderedBroadcast(i, null);
} catch (Exception e) {
}
} /** 拒绝接听*/
public void rejectCall() {
try {
Method method = Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class);
IBinder binder = (IBinder) method.invoke(null, new Object[]{Context.TELEPHONY_SERVICE});
ITelephony telephony = ITelephony.Stub.asInterface(binder);
telephony.endCall();
} catch (NoSuchMethodException e) {
Log.d(TAG, "", e);
} catch (ClassNotFoundException e) {
Log.d(TAG, "", e);
} catch (Exception e) {
}
}
}