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
到这里获取系统权限还没有结束,还需要设置mainifest.xml,在application中加上:
android:process="com.android.phone"
在mainifest.xml的manifest上加上:
android:sharedUserId="android.uid.phone"
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
获取系统权限用到的工具(4.4.2)
http://files.cnblogs.com/files/IT-Goddess/android4.4.2.zip
Android拨打电话不弹出系统拨号界面总结的更多相关文章
- Android 如何解决dialog弹出时无法捕捉Activity的back事件
Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ...
- 【Android】创建Popwindow弹出菜单的两种方式
方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...
- [c/c++] programming之路(2)、kill QQ,弹出系统对话框,吃内存等
一.删除文件 二.盗取密码的原理 #include<stdlib.h> //杀掉QQ,然后提示网络故障,请重新登陆,弹出高仿界面,获取账号密码,然后打开QQ进行登录 void main() ...
- Android EditText默认不弹出输入法,以及获取光标,修改输入法Enter键的方法
一.Android EditText默认不弹出输入法的办法:1. 在AndroidManifest.xml中将需要默认隐藏键盘的Activity中添加属性即可(常用此方法) android:windo ...
- Android BottomSheet:底部弹出Fragment面板(4)
Android BottomSheet:底部弹出Fragment面板(4) BottomSheet不仅可以弹出轻量级的定制好的面板(见附录文章5,6,7),还可以弹出"重"的 ...
- 在IOS端点击数字后会调起系统拨号界面
在IOS端点击数字后会调起系统拨号界面,解决方案: <meta name="format-detection" content="telephone=no" ...
- 使用Vue-TreeSelect组件的时候,用watch变量方式解决弹出编辑对话框界面无法触发更新的问题
在前篇随笔<使用Vue-TreeSelect组件实现公司-部门-人员级联下拉列表的处理>中介绍了Vue-TreeSelect组件的使用,包括使用v-modal绑定值,normalizer ...
- 使用Android拨打电话功能
1.要使用Android系统中的电话拨号功能,首先必须在AndroidManifest.xml功能清单中加入允许拨打电话的权限: <uses-permission android:name=&q ...
- android拨打电话
1.要使用Android系统中的电话拨号功能,首先必须在AndroidManifest.xml功能清单中加入允许拨打电话的权限: <uses-permission android:name=&q ...
随机推荐
- hibernate课程 初探单表映射1-7 hibernate配置文件新建
hibernate 配置文件新建 1 右键src==>new==>other==>hibernate configuration File==>next==>next= ...
- swift 2特性记录
swift 团队一直在优化,让大家准备在秋天的时候,迁移到swift2做准备. 一.错误处理 异常处理,不是NSError对象和双指针. 可以使用 throws 来指定方法来抛出一个错误. 调用d ...
- 做一个vue模态弹出框如何
运用的知识点包括: 路由的配置 插槽 vue的过渡动画 路由重定向 router/index.js里面配置路由 import Vue from 'vue' import Router from 'vu ...
- js对jsonArray的操作
上一篇写了关于java中Gson对jsonArray的排序处理,这里介绍js中对jsonArray处理, <!DOCTYPE html> <html> <head> ...
- SpringBoot JUnit4的断言和注解
Junit4的断言常用方法: assertArrayEquals( new Object[]{ studentService.likeName("小明2").size() > ...
- Unity光晕剑效果的Shader简单实现
最近遇到了一个需求,想要一种在刀剑上带有光晕的酷炫效果,甚至是还想要有闪烁呼吸效果,于是就写了一个简单的叫LightSwrod的Shader去实现,先上图看看效果吧. 简单展示 这是剑本身的样子 这是 ...
- 如何修改HDFS上文件
如果只想append操作: . echo "<Text to append>" | hdfs dfs -appendToFile - yourHdfsPath/test ...
- python字符串及字符串操作
字符串介绍 1.字符串在内存中的存储: 2.字符串相加: 3.字符串的格式化: In [1]: a = 100 In [2]: a Out[2]: 100 #100<255,在堆内存下占用了一个 ...
- C#使用Aspose.Words操作word文档
最近接到个需求,由于客服这边要导出大量有一定规则的word文件,里面的内容希望系统自动填充,例如 这里我使用Aspose.Words.dll这个类库, 1.首先,我们需要创建模板文件,毕竟有规则的东西 ...
- linux下配置Nginx,支持thinkphp
前言引入 一个刚入行的朋友,刚换工作,入职了一个新公司.新公司一个php开发,就是他.俨然老板把他当成公司扛把子了,把服务器都给了他,让他部署整个php的开发环境.那个朋友是wamp爱好者.然后面对l ...