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

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拨打电话不弹出系统拨号界面总结的更多相关文章

  1. Android 如何解决dialog弹出时无法捕捉Activity的back事件

    Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ...

  2. 【Android】创建Popwindow弹出菜单的两种方式

    方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...

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

    一.删除文件 二.盗取密码的原理 #include<stdlib.h> //杀掉QQ,然后提示网络故障,请重新登陆,弹出高仿界面,获取账号密码,然后打开QQ进行登录 void main() ...

  4. Android EditText默认不弹出输入法,以及获取光标,修改输入法Enter键的方法

    一.Android EditText默认不弹出输入法的办法:1. 在AndroidManifest.xml中将需要默认隐藏键盘的Activity中添加属性即可(常用此方法) android:windo ...

  5. Android BottomSheet:底部弹出Fragment面板(4)

     Android BottomSheet:底部弹出Fragment面板(4) BottomSheet不仅可以弹出轻量级的定制好的面板(见附录文章5,6,7),还可以弹出"重"的 ...

  6. 在IOS端点击数字后会调起系统拨号界面

    在IOS端点击数字后会调起系统拨号界面,解决方案: <meta name="format-detection" content="telephone=no" ...

  7. 使用Vue-TreeSelect组件的时候,用watch变量方式解决弹出编辑对话框界面无法触发更新的问题

    在前篇随笔<使用Vue-TreeSelect组件实现公司-部门-人员级联下拉列表的处理>中介绍了Vue-TreeSelect组件的使用,包括使用v-modal绑定值,normalizer ...

  8. 使用Android拨打电话功能

    1.要使用Android系统中的电话拨号功能,首先必须在AndroidManifest.xml功能清单中加入允许拨打电话的权限: <uses-permission android:name=&q ...

  9. android拨打电话

    1.要使用Android系统中的电话拨号功能,首先必须在AndroidManifest.xml功能清单中加入允许拨打电话的权限: <uses-permission android:name=&q ...

随机推荐

  1. 关于WebStorm,PhpStorm新版本输入中文问题

    此文意在记录webstorm,PhpStorm输入中文无提示的问题,对于百忙中的开发无需浏览下面那一段套路话,直接浏览原文链接或者本博客绿色文字解决问题即可. 对于使用过dw,sublime,brac ...

  2. Node.js连接MongoDB

    使用monk访问mongodb mongodb.monk都安装了依赖的前提下: 首先启动MongoDB 服务:mongod: 进入了mongodb后台管理,再通过终端创建数据库:use monk-ap ...

  3. TCP 协议中的 Window Size与吞吐量

    原地址:http://blog.sina.com.cn/s/blog_c5c2d6690102wpxl.html TCP协议中影响实际业务流量的参数很多,这里主要分析一下窗口的影响. ​TCP窗口目的 ...

  4. font:inherit

    font:inherit 字体的设置 设置所有元素的字体保持一致: 所有元素:*{font:inherit;} /* IE8+ */ body体用percent:body{font:100%/1 sa ...

  5. 微软AI发布会,集齐六大亮点召唤黑科技!

    7月12日,微软合作伙伴大会Inspire在华盛顿特区如火如荼地举行.同一天,在相隔5个时区的伦敦,微软还举办了一场关于人工智能的发布会.这是一场智能技术和情感体验两相交融的科技盛宴,既有黑科技,也有 ...

  6. WebUploader实现采集图片的功能

    项目最开始用百度团队的文件上传组件做了个物料照片采集的功能,后来做员工头像采集时竟然不知道怎么使用了. 参照官方Demo: http://fex.baidu.com/webuploader/getti ...

  7. VMware下Centos6.4安装

    VMware(Virtual Machine ware)是一个“虚拟PC”软件公司,提供服务器.桌面虚拟化的解决方案. 小伙伴们网上下载VMware11,一路下一步自己安装吧!!! 打开 VMware ...

  8. sk-learning(1)

    sk-learning学习笔记(1) 简介 scikit learning 是一个python的机器学习库,内置许多机器学习的算法诸如svm.随机森林.逻辑回归.贝叶斯网络等算法.覆盖了分类.聚类.回 ...

  9. win10 U盘重装

    之前用一键重装软件装系统后,D盘留下了一个PE系统,后来我装双系统装好Ubuntu后,打开Ubuntu结果出现了那个PE系统,最后没办法只好重装win10. 重装系统主要有三种方法,参见:链接 因为电 ...

  10. linux 命令——4 mkdir (转)

    linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令 ...