`

Android之Intent探究

阅读更多
在一个Android应用中,主要由四种组件组成(四种组件分别为:Activity、Broadcast、Service、ContentProvider),而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。
      
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
                       
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
                
例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为ListActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为DetailActivity)为了实现这个目的,ListActivity需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity(Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到AndroidManifest.xml中找到满足此Intent要求的Activity,系统会调用找到的Activity,即为DetailActivity,最终传入Intent,DetailActivity则会根据此Intent中的描述,执行相应的操作。

引用
显示网页
Uri uri = Uri.parse("http://www.google.com.hk/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent); 
                           
      
显示地图
Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//其他geo URI范例(latitude: 纬度,longitude: 经度)
//geo:latitude,longitude
//geo:latitude,longitude?z=zoom
//geo:0,0?q=my+street+address
//geo:0,0?q=business+near+city
//google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom 

     

路径规划
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456
      

打电话
//叫出拨号程序 
Uri uri = Uri.parse("tel:0800000123");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
    
//直接打电话出去
Uri uri = Uri.parse("tel:0800000123");
Intent intent = new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);
//用這個,要在 AndroidManifest.xml 中,加上<uses-permission id="android.permission.CALL_PHONE" />
    
传送SMS/MMS
//调用短信程序 
Intent it = new Intent(Intent.ACTION_VIEW, uri);
it.putExtra("sms_body", "The SMS text");
it.setType("vnd.android-dir/mms-sms");
startActivity(it); 
    
//传送消息 
Uri uri = Uri.parse("smsto://0800000123");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body", "The SMS text");
startActivity(it); 
     
//传送 MMS
Uri uri = Uri.parse("content://media/external/images/media/23");
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra("sms_body", "some text");
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType("image/png");
startActivity(it);
    
传送 Email
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
    
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
it.putExtra(Intent.EXTRA_TEXT, "The email body text");
it.setType("text/plain");
startActivity(Intent.createChooser(it, "Choose Email Client"));
   
Intent it=new Intent(Intent.ACTION_SEND); 
String[] tos={"me@abc.com"}; 
String[] ccs={"you@abc.com"}; 
it.putExtra(Intent.EXTRA_EMAIL, tos); 
it.putExtra(Intent.EXTRA_CC, ccs); 
it.putExtra(Intent.EXTRA_TEXT, "The email body text"); 
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 
it.setType("message/rfc822"); 
startActivity(Intent.createChooser(it, "Choose Email Client")); 
    
//传送附件
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client")); 
     
播放多媒体
Uri uri = Uri.parse("file:///sdcard/song.mp3");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
it.setType("audio/mp3");
startActivity(it); 

      

Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it); 
       

Market 相关
//寻找某个应用 
Uri uri = Uri.parse("market://search?q=pname:pkg_name"); 
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where pkg_name is the full package path for an application 
     
//显示某个应用的相关信息 
Uri uri = Uri.parse("market://details?id=app_id");
Intent it = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(it);
//where app_id is the application ID, find the ID
//by clicking on your application on Market home
//page, and notice the ID from the address bar 
                
Uninstall 应用程序
Uri uri = Uri.fromParts("package", strPackageName, null); 
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
分享到:
评论

相关推荐

    Android经典设计源码-Intent_ComponentSample.rar

    这个压缩包包含了Intent_ComponentSample项目的所有源代码,让我们深入探究Android应用中Intent与组件交互的核心概念。 Intent在Android系统中扮演着至关重要的角色,它是组件间通信的主要机制。Intent可以用来启动...

    老罗的android之旅导读ppt

    老罗的PPT将带你深入探究Android的架构,包括用户界面、系统服务、库和运行时环境、硬件抽象层等组成部分。 在PPT中,你可能会学习到: 1. **Android系统架构**:了解Android的分层结构,包括应用程序层、应用程序...

    Android开发之进程间通信AIDL的探究和学习demo

    在"Android开发之进程间通信AIDL的探究和学习"的个人博客中,你将找到一个完整的计算器示例,它展示了如何使用AIDL进行加法和减法运算。通过这个示例,你可以更好地理解服务端如何处理请求,以及客户端如何接收结果...

    Android系统中的Activity探究.pdf

    Activity的生命周期是其核心特性之一,包括onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()等关键方法。这些方法在Activity的不同状态变化时被调用,为开发者提供了管理资源和状态的机会。...

    android 4.0.1系统源码

    系统源码是理解Android运行机制的关键,通过分析源码,开发者可以深入探究其内部工作原理,提升开发效率并优化应用性能。 一、Android系统框架 Android系统主要由五层结构组成:Linux内核、硬件抽象层(HAL)、...

    基于Android手机的好友定位系统的探究与实现

    当位置更新时,将新的位置数据封装进Intent对象,通过sendBroadcast()等相关方法发送,已注册的BroadcastReceiver会根据IntentFilter进行匹配并执行相应的onReceive()方法。 3. **Android编程环境**:项目基于...

    android两个activity的例子

    在Android应用开发中,Activity是构成应用程序的基本组件之一,它代表了用户可见并可以与之交互的屏幕。本文将深入探讨“android两个activity的例子”,基于提供的压缩包文件Android_TwoActivity,我们将详细介绍...

    基于Android的手机通讯录开发的探究与实现.pdf

    《基于Android的手机通讯录开发的探究与实现》 随着科技的不断进步,移动设备已经成为我们日常生活中不可或缺的一部分。尤其是Android操作系统,自2007年发布以来,以其开源、灵活的特性吸引了大量的开发者,为移动...

    android上层应用源码

    源码中可以探究Intent的创建、解析和传递过程。 4. **权限管理**:Android系统通过权限管理系统控制应用的访问权限。源码分析能了解权限请求、验证和动态权限管理的实现。 5. **多线程与异步处理**:源码中包含...

    Android framework详细分析 PDF

    它允许开发者通过声明方式使用Android服务,例如使用Intent在Activity之间传递消息,使用Content Provider访问和共享数据等。Android的无边界设计意图是指框架层提供灵活且高度解耦的服务和组件,使开发者可以构建...

    Android系统源代码

    源代码中,你可以看到这些应用程序是如何与Android系统其他部分进行通信的,例如通过Intent对象来启动服务或活动。通过学习这部分源码,开发者可以更好地设计和实现自己的应用程序,提高用户体验。 2. 应用程序框架...

    Android 开发入门与实践 配套源码

    3. **Activity与Intent**:Activity是Android应用的基本组件,用于展示用户界面。Intent用于在不同组件之间传递数据和启动服务。源码中会展示如何正确启动和管理Activity,以及使用Intent实现应用间的通信。 4. **...

    Android开发教学大纲.doc

    - 案例法与探究法用于Activity生命周期等难点内容的教学。 5. **知识单元五:界面控件及组织** - **教学要求**:掌握View、ViewGroup及Layout等视图API的继承体系及各种典型文本、动作控件的使用方法,学会利用...

    Android应用源码之AndroidAppCodeFramework-master_源码.zip

    AndroidAppCodeFramework-master源码库提供了一个深入理解Android应用开发的宝贵资源,让我们一起探究其中蕴含的丰富知识。 一、Android 应用框架概述 Android App Code Framework是Android应用程序的核心框架,它...

    android-motion-detection-master源码

    6. **Android框架应用**:项目可能使用了Android的生命周期管理、Intent机制、BroadcastReceiver等核心组件,学习源码可以帮助理解Android应用的架构和设计原则。 7. **测试与调试**:源码中可能包含了测试用例或...

    android记事本源码

    这个“android记事本源码”提供了实现这一功能的基础框架,让我们一起深入探究其中的关键知识点。 1. **Activity与Intent** - Activity是Android应用程序的基本组件,代表用户界面。在记事本应用中,`MainActivity...

    android 4.0 launcher分析

    《Android 4.0 Launcher深度解析》 ...理解这些知识点是深入探究Android系统和开发自定义Launcher的基础。通过对Launcher的解析,开发者不仅可以提升Android开发技能,还能为用户提供更加个性化和高效的桌面体验。

    [Android开发精要].扫描版.pdf

    通过《Android开发精要》这本书,开发者不仅可以掌握Android开发的基本技能,还能深入探究Android系统的工作原理,提升自己的技术水平,为创建高质量的应用奠定坚实基础。书中的扫描版PDF文件将为读者提供方便的电子...

    android 教程

    通过《Android应用框架原理与程序设计》这本书,读者不仅可以学习到Android开发的基础知识,还能深入探究Android系统的工作原理,从而提升应用的性能和用户体验。无论你是初学者还是经验丰富的开发者,这本书都将是...

Global site tag (gtag.js) - Google Analytics