显示网页:
1. Uri uri = Uri.parse("http://www.google.com");
2. Intent it = new Intent(Intent.ACTION_VIEW,uri);
3. startActivity(it);
显示地图:
1. Uri uri = Uri.parse("geo:38.899533,-77.036476");
2. Intent it = new Intent(Intent.Action_VIEW,uri);
3. startActivity(it);
路径规划:
1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
2. Intent it = new Intent(Intent.ACTION_VIEW,URI);
3. startActivity(it);
拨打电话:
调用拨号程序
1. Uri uri = Uri.parse("tel:xxxxxx");
2. Intent it = new Intent(Intent.ACTION_DIAL, uri);
3. startActivity(it);
1. Uri uri = Uri.parse("tel.xxxxxx");
2. Intent it =new Intent(Intent.ACTION_CALL,uri);
3. 要使用这个必须在配置文件中加入<uses-permission id="android.permission.CALL_PHONE" />
发送SMS/MMS
调用发送短信的程序
1. Intent it = new Intent(Intent.ACTION_VIEW);
2. it.putExtra("sms_body", "The SMS text");
3. it.setType("vnd.android-dir/mms-sms");
4. startActivity(it);
发送短信
1. Uri uri = Uri.parse("smsto:0800000123");
2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
3. it.putExtra("sms_body", "The SMS text");
4. startActivity(it);
发送彩信
1. Uri uri = Uri.parse("content://media/external/images/media/23");
2. Intent it = new Intent(Intent.ACTION_SEND);
3. it.putExtra("sms_body", "some text");
4. it.putExtra(Intent.EXTRA_STREAM, uri);
5. it.setType("image/png");
6. startActivity(it);
发送Email
1.
2. Uri uri = Uri.parse("mailto:xxx@abc.com");
3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
4. startActivity(it);
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
4. it.setType("text/plain");
5. startActivity(Intent.createChooser(it, "Choose Email Client"));
1. Intent it=new Intent(Intent.ACTION_SEND);
2. String[] tos={"me@abc.com"};
3. String[] ccs={"you@abc.com"};
4. it.putExtra(Intent.EXTRA_EMAIL, tos);
5. it.putExtra(Intent.EXTRA_CC, ccs);
6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
8. it.setType("message/rfc822");
9. startActivity(Intent.createChooser(it, "Choose Email Client"));
添加附件
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
3. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
4. sendIntent.setType("audio/mp3");
5. startActivity(Intent.createChooser(it, "Choose Email Client"));
播放多媒体
1.
2. Intent it = new Intent(Intent.ACTION_VIEW);
3. Uri uri = Uri.parse("file:///sdcard/song.mp3");
4. it.setDataAndType(uri, "audio/mp3");
5. startActivity(it);
1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
2. Intent it = new Intent(Intent.ACTION_VIEW, uri);
3. startActivity(it);
Uninstall 程序
1. Uri uri = Uri.fromParts("package", strPackageName, null);
2. Intent it = new Intent(Intent.ACTION_DELETE, uri);
3. startActivity(it);
Android 源码分析-打电话和发短信
1. ITelephony接口和ISms接口以及AIDL
在我们的Android应用中,当需要实现电话拨号时,我们需要进行如下调用
ITelephony phone = (ITelephony)ITelephony.Stub.asInterface(ServiceManager.getService("phon"))
phone.dial("10086");
对于短信应用,我们需要的是调用SmsManager,代码如下
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage("10086",null,"hi,this is sms",null,null);
这里,SmsManager对ISms做了一层包装,实质上是通过调用
ISms simISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
simISms.sendRawPdu....
可以看到,应用都是采用AIDL来实现IPC的跨进程调度。
对于AIDL应用,调用进程方存在的是一个实现接口的Proxy对象,通过Proxy对象与被调用进程中的Stub对象进行
通讯来实现IPC的跨进程调度,所以,在被调用进程一端必定有一个ITelephony.Stub类以及ISms.Stub类的实现。
2. PhoneInterfaceManager和SimSmsInterfaceManager
ITelephony.Stub 的实现类为com.android.phone.PhoneInterfaceManager
ISms.Stub的实现类为com.android.internal.telephony.gsm.SimSmsInterfaceManager
从这两个类的构造器的调用代码里可以很清楚的看到进行了Service的注册工作
ServiceManager.addService("phone",this);
ServiceManager.addService("isms",this);
3. PhoneApp,InCallScreen,PhoneUtils及其他相关类
从SimSmsInteferManager的相关方法实现中可以看到,具体就是调用GSMPhone的SmsDispatcher实例来进行相关操作的。
从PhoneInterfaceManager会维持一个Phone对象的引用,当拨号应用时,PhoneInterfaceManager会将构造好的Intent传递
给PhoneApp应用,该Intent的className指定则为InCallScreen,从中我们可以看到InCallScreen具体是通过PhoneUtils调用Phone的
相关方法来实现。
PhoneInterfaceManager怎么获取到对应的Phone对象,然后又怎么将Phone对象传递到InCallScreen中呢?
具体这里涉及到了PhoneApp这个类,从这个类维护了一个 PhoneInterfaceManager的引用(phoneMgr)以及一个Phone引用(phone),
从该类的onCreate方法中我们可以清楚的看到,PhoneApp通过PhoneFactory获取了一个Phone实例,并通过该实例实现了PhoneInterfaceManager对象。
因此,我们现在只需要关注PhoneFactory具体提供的是一个什么样的Phone实例了。
另外,PhoneApp类还提供了一个静态方法getInstance供InCallScreen调用,InCallScreen正是通过调用该方法获得PhoneApp实例从而
获得对应的Phone实例的。
接下来,我们通过查看PhoneFactory的方法可以看到,Phone对象对应的就是一个GSMPhone实例。
4。GSMPhone与RIL
从GSM的构造器可以看出,他依赖一个CommandInterface接口实例,通过PhoneFactory的makeDefaultPhones方法,我们可以看到,根据系统环境变量
ro.radio.noril来判断是否需要采用RIL框架实现,如果该参数不为空,则采用Simultedcommands(主要是为了测试需要提供的模拟实现).否则,采用RIL。
通过Google才知道,RIL其实是智能手机上实现AP与BP之间通信的一种设计思想,具体大家可以参见这篇文章http://www.eetchina.com/ARTICLES ... DF?SOURCES=DOWNLOAD
在RIL.java 中我们很惊喜的看到,RIL对对消息的处理是将消息通过LocalSocket发送到以rild为名称的有名端口。这个有名Socket的创建在ril.cpp代码中。
s_fdListen = android_get_control_socket(SOCKET_NAME_RIL)
原来Android通话和发短信的应用是JAVA与C++代码之间透过Socket连接来传输消息来实现的。
5.关于C代码与硬件之间的交互
这部分工作其实就是C代码通过串口发送AT指令来拨号,收发短信。
分享到:
相关推荐
"android HTTP接口测试软件"是一个专为Android平台设计的小型应用程序,旨在简化这个过程。它允许开发者轻松地执行GET和POST请求,并且支持动态添加和删除请求参数。此外,它还具有自动格式化JSON响应的功能,这对于...
最后,书中也会涉及到Android应用程序接口(API)与底层驱动的交互,如何通过JNI(Java Native Interface)调用C/C++库,实现Java代码与驱动程序的通信。这部分内容对于开发系统级应用或扩展Android功能的开发者尤为...
本话题“191 - 接口设计之美-通用性接口的组合应用a”着重探讨了如何通过巧妙地设计和组合通用接口来提升Android应用的灵活性和可复用性。 首先,接口设计的核心理念在于定义明确的契约,它描述了类或组件之间的...
在Android应用开发中,登录注册功能是不可或缺的一部分,它为用户提供了一个访问应用和服务的入口。本项目名为"Android接口实现登录注册",旨在利用现有的接口来实现用户的身份验证和管理功能,包括登录、注册以及...
根据提供的信息,《Android应用案例开发大全》是一本完整的电子书籍,主要聚焦于Android平台上的应用程序设计与实现。本文将从该书可能涵盖的角度出发,详细阐述Android应用开发中的一些核心概念、关键技术以及实用...
Android Studio 是一个功能强大且流行的集成开发环境(IDE),它提供了许多强大的功能和工具来帮助开发者快速开发高质量的应用程序。其中,Android Studio 中的一个重要功能是调用 Restful WCF 接口,用于与远程...
在Android系统中,底层接口与驱动开发是构建高效、稳定且高性能应用的关键环节。本资料主要探讨了Android的内核接口、硬件抽象层(HAL)、设备驱动以及Java与C/C++之间的交互等方面的知识,旨在帮助开发者深入理解...
在本资源"android应用锁的实现"中,我们可能找到一个简单实现这一功能的示例代码。以下是关于Android应用锁实现的一些关键知识点: 1. **权限管理**:在Android系统中,为了实现应用锁,首先需要获取相应的权限。...
在《Android应用案例开发大全(第4版)》中,前六章的源码涵盖了多个Android应用程序开发的关键领域。这些章节旨在帮助开发者深入理解Android平台的特性,掌握实际项目开发中的核心技巧。以下是对每个章节及其相关...
"Android应用耗电排行显示"项目旨在通过编程方式获取并展示Android设备上各个应用程序的耗电量信息。以下是对这个主题的详细解释和相关知识点: 1. **Android电量监控框架**: Android系统提供了一个名为`...
an android demo to use openai's api 调用openai提供的接口,实现与ChatGPT对话 功能: 支持至Gpt-3.5模型(因为本人买不起plus) ✓ 无需代理即可与ChatGPT对话(可以使用自己的服务器中转) ✓ 支持带记忆的...
在Android系统中,静默安装...总之,Android 10.0对静默安装和卸载接口的调整是为了加强安全控制,对于开发者来说,这意味着在设计和实现这类功能时需要更加谨慎,遵循最佳实践并充分考虑用户的隐私和系统的安全性。
通过理解和熟练运用接口,开发者能够编写出更符合面向对象原则的代码,提高代码的复用性和可扩展性,同时也使得Android应用的架构更加清晰和合理。因此,对于Java和Android开发者来说,深入理解并掌握接口的应用是至...
然而,Android应用的UI线程(主线程)负责处理用户交互,如果在工作线程中直接调用回调,可能导致应用程序无响应(ANR)。为了解决这个问题,我们常常使用Handler和Thread配合来处理后台任务。 Handler是Android...
Android应用框架是构建Android应用程序的基础,它包含了操作系统与应用程序之间的所有中间层,使得开发者能够创建功能丰富的移动应用。本文将详细讲解Android应用框架及其开发步骤。 首先,Android应用框架包括了多...
在Android开发过程中,掌握API接口的使用至关重要。这个名为"Android开发接口帮助文档"的.chm格式文件,是一个离线的、专为Android开发者设计的帮助文档。它包含了丰富的信息,帮助开发者快速查找并理解Android各类...
开发Android应用时,使用的主要工具是Android Studio,它是谷歌官方推荐的集成开发环境(IDE),取代了早期的Eclipse。Android Studio提供了丰富的功能,包括项目管理、代码编辑、调试、性能优化以及对不同设备的...
《卓越工程师培养计划"十二五"规划教材:Android嵌入式应用开发》主要内容包括Android基础知识、Android应用程序开发的基本流程、Android应用程序开发的常用编程接口、常用控件及一些在应用程序中常用的模块和功能的...
《Android应用案例开发大全》是针对Android平台应用开发的一本综合性教程,主要涵盖了从基础到高级的各种Android应用程序设计和实现的实例。通过本书,开发者可以深入理解Android开发环境、编程模型以及各种API的...