Android拨打电话不弹出系统拨号界面总结

我在网上搜了一下,解决这个问题,有两种方式:

1.反射调用系统底层方法,并获取系统权限

反射调用的代码如下:

Class phoneFactoryClass = Class.forName("com.android.internal.telephony.PhoneFactory");

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

makeDefaultPhones.invoke(null,context);

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

Object p = getDefaultPhone.invoke(null);

Class classCallManager = Class.forName("com.android.internal.telephony.CallManager");

Object  CallManagerInstance=classCallManager.getDeclaredMethod("getInstance");

classCallManager.getMethod("registerPhone", Object.class).invoke(CallManagerInstance, p);

Method newGetDefaultPhone =classCallManager.getMethod("getDefaultPhone");

Object phone=newGetDefaultPhone.invoke(CallManagerInstance);

String phoneName = "com.android.internal.telephony.Phone";

Class phoneClass = Class.forName(phoneName);

phoneClass.getMethod("dial", String.class).invoke(phone, number);

正常调用的思路:

PhoneFactory.makeDefaultPhones(context);

Phone p = PhoneFactory.getDefaultPhone();

CallManager cm = CallManager.getInstance();

cm.registerPhone(p);

Phone phone = cm.getDefaultPhone();

phone.dial(number);

代码写完了之后,还需要获取系统权限。

当然,如果你手上有源码环境,那就不要这么麻烦了,直接将你的程序放到源码环境进行编译即可。下面讨论的前提是,我们有系统的签名程序,但没有系统源码环境,但是有在线源码,比如http://androidxref.com/网站,具体参考:

http://gqdy365.iteye.com/blog/2111949

开始获取系统权限的过程:

(1)获取platform.pk8和platform.x509.pem

通常在源码环境的build\target\product\security目录下,不同的系统版本找对应的文件(我用的是4.4.2的版本)

(2)获取signapk,.jar

通常在源码环境的build\tools\signapk目录下,我是直接在网上下载的4.4.2的版本

(3)将(1)(2)中获取的文件和生成的apk放在一个文件夹中,进入到这个目录,执行签名操作:

java -jar signapk.jar  platform.x509.pem platform.pk8 原.apk 新.apk

2.将android源码编译的jar包项目中引用,直接使用拨打电话

直接调用的方法:

PhoneFactory.makeDefaultPhones(context);

Phone p = PhoneFactory.getDefaultPhone();

CallManager cm = CallManager.getInstance();

cm.registerPhone(p);

Phone phone = cm.getDefaultPhone();

phone.dial(number);

在build.pradle文件中设置:

defaultConfig {

multiDexEnabled true

}

dexOptions {

javaMaxHeapSize "4g"

incremental true

}

总结,我在网上找到的文章中说可以实现,但具体我实践下来是没有成功的,网上实现这个功能的系统版本是比较低的,而我实践的版本是4.4.2

可以参考:

http://blog.csdn.net/u013401219/article/details/45887193

http://blog.sina.com.cn/s/blog_65977dde0100uu7b.html

时间: 2024-11-08 10:52:24

Android拨打电话不弹出系统拨号界面总结的相关文章

Android PopupWindow 仿微信弹出效果

项目中,我需要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果,这样大家直接拿到项目里就可以用了!首先让我们先看效果: 那么我首先先看下布局代码非常简单:如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pop_layout" android:layout_

webview loadUrl() 弹出系统浏览器解决办法

有很多时候,我们请求的网站会直接跳转到一个位置,这样会直接全屏浏览器加载被跳转的网页,或者弹出浏览器选择(除了系统的,你还自己安装了其他浏览器). 于是解决办法的原理就是,在webview中跳转. 办法一: mywebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { //重写此方法表明点击网页里面的链接 //还是在当前的we

【android】禁止Edittext弹出软键盘并且使光标正常显示

/** * 禁止Edittext弹出软件盘,光标依然正常显示. */ public void disableShowSoftInput() { if (android.os.Build.VERSION.SDK_INT <= 10) { editText.setInputType(InputType.TYPE_NULL); } else { Class<EditText> cls = EditText.class; Method method; try { method = cls.get

WinXP系统打开Word文档会弹出“打开方式”界面怎么办

WinXP系统打开Word文档会弹出"打开方式"界面怎么办 Word是微软公司开发的一个文字处理器应用程序,我们在日常办公中经常会使用到它.不过,最近有些XP系统用户反馈,电脑已经安装过Office,不过在打开Word文档时,总会弹出打"打开方式"界面,并提示选择你想用来打开此文件的程序,这该如何解决呢? 原因分析: 如果XP系统xitongcheng.com/xp/中安装过Office软件,而现在出现打开方式的界面,很有可能是文件关联出错了,或是你安装过别的Off

android 开发点击弹出对话框中的按钮进行页面跳转如何实现

android开发中,点击弹出对话框中的按钮进行页面跳转,如何实现?可以这样做: 可以获取对话框的点击事件,比如点击了确定然后你就跳转 AlertDialog.Builder builder = new Builder(CommentActivity.this); builder.setMessage("确定要跳转吗?"); builder.setTitle("提示"); builder.setPositiveButton("确认", new a

[c/c++] programming之路(2)、kill QQ,弹出系统对话框,吃内存等

一.删除文件 二.盗取密码的原理 1 #include<stdlib.h> 2 3 //杀掉QQ,然后提示网络故障,请重新登陆,弹出高仿界面,获取账号密码,然后打开QQ进行登录 4 void main(){ 5 system("taskkill /f /im QQ.exe"); 6 system("pause"); 7 system("D:\\QQ\\Bin\\QQScLauncher.exe"); 8 } 三.弹出系统对话框 1 #

iOS开发日记15-强制弹出系统键盘(禁用搜狗键盘)

今天博主有一个强制弹出系统键盘的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 起因是在使用搜狗的过程中,使用中文字符标点产生了bug,应该是搜狗的问题.追询一番无果后,决定禁用搜狗键盘,使用系统自带的键盘. 尝试了很多方法,通知,KVO等等,最后找到了一个系统的API,十分的简便,分享给大家. 在AppDelegate中添加如下代码,即可. //强制使用系统键盘 - (BOOL)application:(UIApplication *)application shouldAllow

android中常用的弹出提示框

转自:http://blog.csdn.net/centralperk/article/details/7493731 我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框.当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有

使用Android拨打电话功能

1.要使用Android系统中的电话拨号功能,首先必须在AndroidManifest.xml功能清单中加入允许拨打电话的权限: <uses-permission android:name="android.permission.CALL_PHONE" /> // 允许拨打电话权限 2.进行拨打电话的代码: a.调用Android系统的拨号界面,但不发起呼叫,用户按下拨号键才会进行呼叫 1 @Override 2 public void onCreate(Bundle sa