【Android读书笔记】Android如何知道Intent要做什么
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了。
更多相关文章
- android 霓虹灯效果
- Application Fundamentals--Intent 过滤器
- Android(安卓)Acrchitecture Components( 架构组件)+热门框架(Re
- Android四大组件之服务
- AndroidStudio学习笔记-03ART模式
- android页面跳转的几种方式
- react-navigation使用及dva初探二
- 深入讲解Android中Activity launchMode
- Android(安卓)Studio第二期 - 短信自动填写项目流程讲解