深入学习Android中的Intent

2019-12-10 19:43:47于海丽
深入学习Android中的Intent,Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,对Intent感兴趣的小伙伴们可以参考一下  

Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,使用Intent可以激活Android应用的三种类型的核心组件:活动Activity、服务Service、广播接受者Broadcast。

Intent又分为隐士意图和显示意图。

显示意图:调用intent.setComponent()、intent.setClassName()或者intent.setClass()方法明确的制定组件名的Intent为显示意图,显示意图明确的制定要激活哪一个组件。

隐士意图:没有明确的制定组件的名称;下边是一个隐士意图的案例

首先应该在清单文件中添加相应的intent-filter

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
      android:label="@string/app_name"
      android:name=".IntentActivity" >
      <intent-filter >
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    <activity android:name=".OtherActivity" android:label="@string/windowtitle">
      <intent-filter >
        <action android:name="cn.itcast.zhangxx"/>
        <action android:name="cn.itcast.laoli"/>
        <category android:name="cn.itcast.category.java"/> 
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="cn.itcast.category.php"/>
        <data android:scheme="itcast" android:host="www.itcast.cn" android:path="/liming"/>
        <data android:mimeType="image/*"/>
      </intent-filter>      
    </activity>
  </application>

在MainActivity.java中

public void openActivity(View v){
    /**
     * (没设数据参数的情况下)只要Intent中的Action和Category都出现在Intent-Filter中,就能与之匹配,否则匹配失败
     */
    Intent intent = new Intent();//隐式意图激活Activity
    intent.setAction("cn.itcast.zhangxx");
    intent.addCategory("cn.itcast.category.java");  

    // intent.setData(Uri.parse("itcast://www.itcast.cn/liming"));
    // intent.setType("image/jpeg");
    //根据Android的API可以知道
    //This method automatically clears any data that was previously set (for example by setData(Uri)). 
    //也就是说如果设置了setData方法在设置setType方法的话,那么setType方法就会clers掉setData方法
    //解决方案如下:

    intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/liming"), "image/jpeg");
    startActivity(intent);//方法内部为Intent添加了android.intent.category.DEFAULT类别
  }