轉載請聲明:http://bbs.niuzhi.cc/thread-22-1-1.html
1.第一步,在代碼里加上以下方法
/**
* 說明:發送dtmf事件
* Author:陳偉斌
* 2012-12-13
* @param keycode
*/
public void sendDTMF(char keycode) {
try {
Class cls_phoneFactory = Class
.forName("com.android.internal.telephony.PhoneFactory");
Method method_getDefaultPhone = cls_phoneFactory.getDeclaredMethod(
"getDefaultPhone", null);
method_getDefaultPhone.setAccessible(true);
Object obj_phone = method_getDefaultPhone.invoke(null);
Method method_sendDTMF = obj_phone.getClass().getDeclaredMethod(
"sendDtmf", char.class);
method_sendDTMF.invoke(obj_phone, keycode);
} catch (Exception e) {
e.printStackTrace();
}
}
2.在AndroidManifest.xml裏增加
android:sharedUserId="android.uid.phone"
當然也可以是
android:sharedUserId="android.uid.system"
3.在application節點增加
android:process="com.android.phone"
如果你覺得不合適,也可以在你要增加這個事件的activity節點加,效果一樣
4.這時是不能直接運行的,運行的話會報一個錯
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
這時,需要對生成的apk文件進行系統簽名
沒有簽名工具的話可以到這裏下載
http://download.csdn.net/detail/c_weibin/4883635
5.大功告成
另外:如果手頭上有源碼,直接在IncallScreen.java裏自己寫個廣告,監聽自己應用裏的dtmf事件也行,然後在收一廣播後,執行mPhone.sendDtmf(keycode);注意,這裏的mPhone 不需要自己去初使化,就這樣子寫就行了!這種方式就不會出現跨線程操作,導致一些很奇怪的現象,也沒有權限限制