古詩詞大全網 - 成語經典 - 100分 Android怎麽調用打電話而不顯示系統的通話界面

100分 Android怎麽調用打電話而不顯示系統的通話界面

1、 用反射調用 “com.android.internal.telephony.PhoneFactory”,“com.android.internal.telephony.CallManager”,“com.android.internal.telephony.Phone”中的方法。

代碼如下:

public void Call(String number, Context context) {

try {

final Class<?> phoneFactoryClass = Class.forName("com.android.internal.telephony.PhoneFactory");

Method makeDefaultPhonesMethod = phoneFactoryClass.getDeclaredMethod("makeDefaultPhones", Context.class);

makeDefaultPhonesMethod.invoke(null, context);

Method getDefaultPhone = phoneFactoryClass.getDeclaredMethod("getDefaultPhone");

Object phone = getDefaultPhone.invoke(getDefaultPhone);

final Class<?> callManagerClass = Class.forName("com.android.internal.telephony.CallManager");

Method getInstanceMethod = callManagerClass.getDeclaredMethod("getInstance");

Object callManager = getInstanceMethod.invoke(getInstanceMethod);

final Class<?> phoneClass = Class.forName("com.android.internal.telephony.Phone");

Method registerPhoneMethod = callManagerClass.getDeclaredMethod("registerPhone", phoneClass);

registerPhoneMethod.invoke(callManager, phone);

Method maybeGetMethod = callManagerClass.getDeclaredMethod("getDefaultPhone");

Object phone1 = maybeGetMethod.invoke(callManager);

Method dial = phoneClass.getDeclaredMethod("dial", String.class);

dial.invoke(phone1, number);

} catch (ClassNotFoundException e) {

String string = e.getCause().toString();

Log.e("CallTest" ,string);

} catch (Exception e) {

String string = e.getCause().toString();

Log.e("CallTest" ,string);

}

}

2、在manifest中加如下權限

<manifest xmlns:android="/apk/res/android"

package="com.example.callphone"

android:sharedUserId="android.uid.system"

android:versionCode="1"

android:versionName="1.0" >

<uses-permission android:name= "andoird.permission.CALL_PHONE"/>

<uses-permission android:name= "andoird.permission.CALL_PRIVILEGED"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL"/>

3、將生成的apk用系統簽名,不同的OS有不同的簽名,例如我用的是

java -jar signapk.jar platform.x509.pem platform.pk8 Callphone_unsigned.apk Callphone_signed.apk。其中platform.x509.pem platform.pk8在不同的OS中不同。

備註:用sharedUserId和系統簽名後,程序才有權限運行。同理,程序不能調試,只能log跟蹤。