Intent,最简单的回答是装载有数据的动作(an action with it's assotiated data payload),也就是你想要用这个数据做什么。我们可以使用它来调用内部或是外部组件(从我们的应用中调用其他的应用程序),通常是个Activity.

对于一个给定的Intent,什么组件被调用基本上是依赖于Intent的action和data.要使一个组件能被其他的组件调用,我们需要在AndroidManifest.xml中注册这个活动。就像这样:

<activity android:name="YOUR_ACTIVITY_NAME"
android:label="Basic View Tests">
<intent-filter>
<action android:name="YOUR_PACKAGE_NAME.intent.action.YOUR_ACTIVITY_NAME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

这里注册不仅仅使这个活动可用来被其他组件调用,也表明可以被什么样action的Intent来调用,之后可以这样调用它
String actionName= " YOUR_PACKAGE_NAME.intent.action.YOUR_ACTIVITY_NAME";
Intent intent = new Intent(actionName);
parentActivity.startActivity(intent);

你也可以直接指定要调用的组件完整类名(包名+类名),这样系统就会直接去调用那个类,而不用去判断哪个组件来处理这个intent.如:

Intent intent = new Intent(parentActivity,YOUR_CLASS_NAME);
parentActivity.startActivity(intent);

有一些系统预定义的action与要调用组件之间有一对一的关系,比如:

Intent.ACTION_DIAL对应电话拨号程序的拨号器Dialer,不需要任何data

Intent.ACTION_CALL对应电话拨号程序的Call,需要setData(Uri.parse("tel:对方号码"))

但是,对于ACTION_VIEW通用动作Android如何知道那个活动要被调用,这种情况,Android更多依赖于Intent的data URI.Android会查看URI的模式,检索所有注册的Activities看哪些能够理解这模式,也包括要能够处理VIEW动作,然后调用那个正确的Activity。浏览器Activity注册了针对http数据模式的VIEW intent,在manifest中就像

<activity…..>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http"/>
<data android:scheme="https"/>
</intent-filter>
</activity>

e.g.

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.google.com") );
parentActivity.startActivity(intent );

这样,系统就知道要打开浏览器,来访问Google了。

更多相关文章

  1. android 霓虹灯效果
  2. Application Fundamentals--Intent 过滤器
  3. Android(安卓)Acrchitecture Components( 架构组件)+热门框架(Re
  4. Android四大组件之服务
  5. AndroidStudio学习笔记-03ART模式
  6. android页面跳转的几种方式
  7. react-navigation使用及dva初探二
  8. 深入讲解Android中Activity launchMode
  9. Android(安卓)Studio第二期 - 短信自动填写项目流程讲解

随机推荐

  1. Android中TextView的内容展示不全的问题
  2. 使用QtCreator加速Android(安卓)NDK开发
  3. Android在开发中的实用技巧之Parcelable
  4. [转]近百个Android优秀开源项目,覆盖Andro
  5. Android(安卓)SQLite教程:内部架构及SQLit
  6. Android Battery 开发(二)
  7. [置顶] JuheNews For aNdroid (改进版)
  8. Android(安卓)系统编译与调试
  9. Android中多个Activity间的数据共享
  10. Android(安卓)9.0 最完整的新特性列表