android学习五 Intent

1.Intent是组件间调用的桥梁。
2.Android系统定义了很多Intent
   http://developer.android.com/guide/components/intents-common.html
3.Intent
   Intent包括的内容可以有以下一个或多个

  • 操作
  • 数据
  • extra数据
  • 组件名称

包含组件名称的Intent叫显示Intent,否则

叫隐式Intent。显示Intent在做目标活动匹配时会忽略掉除组件名称的其他部分内容。

new Intent(Intent.ACTION_DIAL)  //操作
    intent.setData(Uri.parse("http://www.google.com")); //数据
    putExtra(String name,...);//extra数据
    intent.setComponent(new ComponentName("com.android.contacts","com.android.contacts.DialContactsEntryActivity"));//组件名称

4.数据是对URI进行解析的结果,可能是http网页,也可能是ContentProvider...这根据数据模式来确定例如:content:,file:等。
   接收的Intent需要通过Intent过滤器来声明是否能处理这种数据模式。
5.预定义的操作
   http://developer.android.com/guide/topics/manifest/data-element.html
6.extra数据可以给目标组件提供更多的信息。 extra data通过android.os.Bundle表示,就是键值对的形式,键通常以包名开头,值是任意对象。需要实现android.os.Parcelable接口。
   putExtra方法是复制操作。
7.使用组件名称直接调用组件。包名和类名需要完全限定。
8.组件的类别。
   预定义的category
   http://developer.android.com/reference/android/content/Intent.html#CATEGORY_ALTERNATIVE
9.Intent包括的4部分内容中,如果没有指定组件名称,则为隐式Intent,对于使用隐式Intent来启动其他组件,则对目标组件的确定就是通过剩下3部分综合作用来确定的。
   应用应该在声明文件中编写Intent过滤器,用于android系统确定Intent与应用是否匹配。Intent过滤器的格式

如果设置Intent时设置了data(uri),则数据类型应被设置

<intent-filter>
          <action android:value="android.intent.action.MAIN" />
          <category android:value="android.intent.category.HOME" />
          <category android:value="android.intent.category.DEFAULT />
          ....
   </intent-filter>

匹配的基本规则:操作(action),类型(category),数据特征(data android:name 和 data andriod.mimeType)必须与过滤器匹配。
   具体的规则:
   操作:过滤器不包含则匹配所有操作,如果包括则必须匹配。
   数据:过滤器没有指定数据特征则不匹配任何包括数据特征的Intent调用,如果包括则必须匹配。
   数据类型 (data android:mimeType):必须匹配。 数据类型的确定有两种方式
                                    a.传入的URI是内容或文件URI,这由ContentProvider或android来确定
                                    b.显示获取intent.getType()。这个需要在客户端构造Intent的时候调用setType(),调用setType就不应该设置URI,因为setType会自动设置。
   数据模式,数据授权,数据路径协同匹配,即最长匹配。
   Intent类别:调用intent中的所有type必须包含在intent过滤器中。调用intent如果没有包含任何类别则当做default类别,所以希望通过隐式Intent调用的组件必须声明DEFAULT类别。

时间: 2024-10-10 15:22:08

android学习五 Intent的相关文章

Android学习笔记-Intent(一)

Intent对象在Android官方API这样描述:It is a passive data structure holding an abstract description of an operation to be performed. 它是一种数据结构,抽象描述一次将要被执行的操作,其作用是在程序运行过程中连接两个不同的组件. Intent机制的引入,是实现Android应用程序的组件间通信的一种消息机制,它允许你在应用程序的组件间传递 Intent 来执行动作和产生事件,组件可以是跨应

Android学习之Intent传递数据

Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据. 一.向下一个Activity传递数据主要是利用Intent作为“信使”来调用, 原Activity需要创建一个intent,并用putExtra(键,值)方法向intent中放入需要传递的信息,然后启动. public void onClick(View view){ String msg =

android学习五(android中基本控件的使用)

前面已经学了activity的一些使用,那么下面我们进行android中基本的控件的学习和使用. 1.android中的TextView控件 新建一个项目,项目名为UITest,才有默认的设置,修改布局文件的内容,如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" a

Android学习之Intent过滤器的使用

Intent过滤器 我们的app的功能可能对别的app也有用,那么我们的app应该做好响应其他APP的准备. 例如,一个社交app,它可以分享信息或者照片给好友,那么最好我们的app能够接收ACTION_SEND的intent,这样当用户在其他app触发分享功能的时候,我们的app也能够出现在待选对话框. 通过在manifest文件中的<activity>标签下添加<intent-filter>属性,能使其他的app能够启动我们的activity. 当app被安装到设备上时,系统可

android学习之intent学习笔记

1 以代码介绍一下激活意图的方法: //显示激活意图 //方法1 // Intent intent=new Intent(); // intent.setClassName("com.example.multiactivity", "com.example.multiactivity.SecondActivity"); // startActivity(intent); //方法2 // Intent intent=new Intent(this, SecondAc

Android学习五:Content Provider 使用

1ContentProvider相关知识1.1在安卓应用中,通过文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据.可以看出虽然它们 可以对外共享数据,但数据访问方式会因数据存储的方式而不同.在安卓中使用ContentProvider共享数据在不同的应用程序之间共享数据,底层的操作是透明的,对外提供统一接口,并可以让其它应用轻松访问该数据. 1.2ContentProvider使用表的形式来组

Android学习记录 - Intent

1,Intent是什么? Intent是Activity之间跳转的媒介,通过这个媒介,一个Activity可以跳转到另一个Activity 2,为什么需要Intent(意义.作用等) 当应用程序具有多个Activity时,通常需要从一个Activity跳转到另一个Activity,而Intent的作用就是完成这个跳转,并且它还可以协助一个Activity传递数据给另一个Activity 一个Activity类似于一个网页,网页之间的跳转使用URL,而Activity之间的跳转使用Intent

android学习:intent和Bundle传值上的区别

https://blog.csdn.net/u014657752/article/details/47301569 结论: Bundle在存取数据是比较灵活的,而Intent在存取数据的种类很少且没有指定数据类型: 想对数据进行比较灵活的操作如批量操作的话就用bundle: Bundle是可以对对象进行操作的,而Intent不可以.Bundle相对于Intent比较偏下层,比Intent接口更多,更灵活,但Bundle仍需要借助Intent才能在Activity之间传递. 概括一下,Intent

Intent的Component,Action和Category属性详解-android学习之旅(五十)

Component属性 代码示例 public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnIntent).setOnClickListener(ne