`
ck19860613
  • 浏览: 86668 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【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了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics