Intent(意图)


Intent可以划分成显示意图和隐士意图


显示Intent:对于明确指出了目标组件名称的Intent,我们称之为
            显示Intent


隐式Intent:没有明确指定组件名的Intent为隐式Intent





显示Intent如下




三种方式使用Intent方式


第一种
Intent intent1 = new Intent();
intent1.setClass(this,activity1.class);
startActivity(intent1);


 第二种
Intent intent2 = new Intent();
   intent2.setClassName(this,"com.example.dbproject.activity1");
startActivity(intent2);


 第三种
Intent intent3 = new Intent3();
intent3.setClassName("com.example.dbproject","com.example.dbproject.activity1");
startActivity(intent3);





配置清单

<activity android:name=".activity1"></activity>
 <activity android:name=".s.activity2"
android:exported="true"></activity>



android:exported="true"代表可以被其它应用程序调用




Intent可以激活Android应用的三个核心组件,
Activity
Service
BroadcastReceiver







隐式Intent如下:


<!-- 清单配置 -->
  <!-- 这是第一个activity -->
         <activity android:name=".activity_1">
             <intent-filter>
                 <action android:name="com.cnnote.www" />
                 <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
         </activity>
         <!-- 这是第二个activity,并且它的action名称第一个是一样的 -->
         <activity android:name=".activity_2">
             <intent-filter>
                 <action android:name="com.cnnote.www"/>
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>





代码中

public void onClick(View v){ 
      Intent intent = new Intent();
      intent.setAction("com.cnnote.www");
      intent.addCategory(Intent.Category_DEFAULT);
      startActivity(intent);
 }




显示Intent和隐式Intent


Intent-filter就是像手机号码的白名单一样


当我们配置了Intent-filter,并且同时有几个项目,
他们的intent-filter的action都是一样的,那么在
执行这个软件操作的时候,就会弹出一个窗口提供用户选择




如果使用隐式Intent,就需要
使用action  android:name="com.cnnote.test"
使用category android:name="android.intent.category.DEFAULT"
使用data android:scheme="http" android:host="www.baidu.com" android:port="8080" android:path="/image"


//当点击按钮后,执行如下操作,系统就会弹出提示,
//提供用户选择其中一个


Intent intent = new Intent();
intent.setAction("com.cnnote.test");
intent.addCategory(Intent.CATEGORY_DEAFAULT);
intent.setData(Uri.parse("http://www.baidu.com:8080/image"));
startActivity(intent);



<!-- 清单配置 -->
  <!-- 这是第一个activity -->
         <activity android:name=".activity_1">
             <intent-filter>
                 <action android:name="com.cnnote.www" />
                 <category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http" android:host="www.baidu.com" android:port="80" android:path="/image"/>
             </intent-filter>
         </activity>
         <!-- 这是第二个activity,并且它的action名称第一个是一样的 -->
         <activity android:name=".activity_2">
             <intent-filter>
                 <action android:name="com.cnnote.www"/>
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:scheme="http" android:host="www.baidu.com" android:port="80" android:path="/image"/>
   </intent-filter>
         </activity>









一条<intent-filter>至少包含一个<action/>


我们使用intent可以测试action


也可以单独测试category

<data android:scheme="http" />
 <data android:scheme="http" 
       android:host="www.baidu.com" />
 <data android:scheme="http" 
       android:host="www.baidu.com" 
       android:port="8080" />
 <data android:scheme="http" 
       android:host="www.baidu.com" 
       android:port="8080"
       android:path="/image" />
 <data android:scheme="http" 
       android:host="www.baidu.com" 
       android:port="8080"
       android:path="/image"
       android:mimeType="text/plain" />




 Intent intent = new Intent();
 intent.setType("text/plain");




URL和URN,统称为URI


URI,同意资源定位符  Uniform Resource Locator
  是对可以从互联网上得到的资源位置和访问方法的一种简介的表示
  是互联网上标准资源的地址,互联网上的每个文件都应该有一个
  唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它


URN  统一资源名称 Uniform Resource Name 它是一种更新形式,不依赖位置
     情切又可能减少失效连接是个数