1
2
3
4
5
6
7
8
9
10
         //通过制定setComponent来启动组件
     public  void  start(View view){
         //创建一个意图
         //Intent intent=new Intent(this,MainActivity2.class);
         Intent intent= new  Intent();
         //创建组件,通过组件响应,直接Intent
         ComponentName component= new  ComponentName( this , MainActivity2. class );
         intent.setComponent(component);
         startActivity(intent);
     }
1
2
3
4
         public  void  start1(View view){
         Intent intent= new  Intent( this ,MainActivity9. class );
         startActivity(intent);
     }

通过action属性查找启动activity,必须在清单文件中进行配置

1
2
3
4
5
6
7
         //通过action属性查找启动activity
     public  void  start2(View view){
         Intent intent= new  Intent();
         //设置动作,实际上action就是字符串标记而已
         intent.setAction(MainActivity3.MY_ACTION);
         startActivity(intent);
     }

MainActivity3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package  com.example.intent;
 
import  android.app.Activity;
import  android.os.Bundle;
/**
  * 在自定义动作时,使用action组件时,必须添加一个默认类别
  * <activity android:name="MainActivity3">
               <intent-filter >
                   <action android:name="com.example.action.MY_ACTION">
                   </action>
                   <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    
  * 如果有多个组件被匹配成功,就会对话框列表的形式让用户进行选择
  * */
public  class  MainActivity3  extends  Activity{
     //自定义action标记
     
     public  static  final  String MY_ACTION= "com.example.action.MY_ACTION" ;
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main3);
     }
}

清单文件中的配置,如果没有类别,必须写上默认类别

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   <application
         android:allowBackup= "true"
         android:icon= "@drawable/ic_launcher"
         android:label= "@string/app_name"
         android:theme= "@style/AppTheme"  >
         <activity
             android:name= ".MainActivity"
             android:label= "@string/app_name"  >
             <intent-filter>
                 <action android:name= "android.intent.action.MAIN"  />
 
                 <category android:name= "android.intent.category.LAUNCHER"  />
             </intent-filter>
         </activity>

加入的类别越多,越精确,如果有找不到的类别会报错(假设有两个类别,一个类别未找到,则报错)

1
2
3
4
5
6
7
8
9
public  void  start3(View view){
         Intent intent= new  Intent();
         intent.setAction(MainActivity4.MY_ACTION);
         intent.addCategory(MainActivity4.MY_CATEGORY);
         //如果MainActivity4中没有在清单文件中配置,且写了下面的类别,则会报错
         //intent.addCategory(MainActivity4.MY_CATEGORY2);
         //加入的类别越多,越精确,如果有找不到的类别会报错
         startActivity(intent);
     }

MainActivity4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package  com.example.intent;
 
import  android.app.Activity;
import  android.os.Bundle;
/**
  * 自定义类别
  * 在Intent中可以添加多个类别
  * 那就要求被匹配的组件必须同时满足这多个类别才能匹配成功,否则匹配失败
 
  * */
public  class  MainActivity4  extends  Activity{
     //自定义动作类别
     public  static  final  String MY_CATEGORY= "com.example.category.myCategory" ;
     public  static  final  String MY_CATEGORY2= "com.example.category.myCategory2" ;
     //自定义动作
     public  static  final  String MY_ACTION= "com.example.action.myAction2" ;
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main4);
     }
}

清单文件中的MainActivity4

1
2
3
4
5
6
7
8
9
10
  <activity android:name= "MainActivity4" >
               <intent-filter >
                 <!--   <action android:name= "com.example.action.MY_ACTION" ></action> -->
                   <action android:name= "com.example.action.myAction2" ></action>
                   <category android:name= "com.example.category.myCategory" />
                   <category android:name= "com.example.category.myCategory2" />
                   <category android:name= "android.intent.category.DEFAULT" />
                   <!-- 没有类别时要加上默认类别 -->
               </intent-filter>
  </activity>

 intent中的Date属性

 Date属性表示动作(要操作)的数据

 实际上一个Date是用一个URI对象表示

 通常情况下,使用action+date属性的组合来描述一个意图(intent)

 当Intent匹配的组件有多个时,先显示优先级高的组件,如果优先级相同,显示列表让用户自己选择

 优先级从-1000到1000,并且其中一个必须为负值才有效



MainActivity5:指定访问一个网址


                <intent-filter android:priority="800">

                    <action android:name="android.intent.action.VIEW"/>

                    <data android:scheme="http" android:host="java.lampbrother.net"/>

                <category android:name="android.intent.category.DEFAULT"/>

                </intent-filter>



Intent intent=new Intent();

intent.setAction(Intent.ACTION_VIEW);

Uri uri=Uri.parse("http://java.lampbrother.net");

intent.setData(uri);

startActivity(intent);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package  com.example.intent;
 
import  android.app.Activity;
import  android.content.Intent;
import  android.net.Uri;
import  android.os.Bundle;
import  android.view.View;
/**
  * intent中的Date属性
  * Date属性表示动作(要操作)的数据
  * 实际上一个Date是用一个URI对象表示
  * 通常情况下,使用action+date属性的组合来描述一个意图(intent)
 
 
 
  * 当Intent匹配的组件有多个时,先显示优先级高的组件,如果优先级相同,显示列表让用户自己选择
  * 优先级从-1000到1000,并且其中一个必须为负值才有效
  * */
public  class  MainActivity5  extends  Activity{
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main5);
     }
     
     
     public  void  testActionDateClick(View ivew){
         Intent intent= new  Intent();
         intent.setAction(Intent.ACTION_VIEW);
         Uri uri=Uri.parse( "http://java.lampbrother.net" );
         intent.setData(uri);
         startActivity(intent);
     }
     
     public  void  testActivity7(View view){
         Intent intent= new  Intent( this ,MainActivity7. class );
         startActivity(intent);
     }
}

清单文件中MainActivity5的配置

1
2
3
4
5
6
7
8
          <activity android:name= "MainActivity5" ></activity>
             <activity android:name= "MainActivity6" >
                 <intent-filter android:priority= "800" >
                     <action android:name= "android.intent.action.VIEW" />
                     <data android:scheme= "http"  android:host= "java.lampbrother.net" />
                     <category android:name= "android.intent.category.DEFAULT" />
                 </intent-filter>
          </activity>

Intent

 date+type属性

 type表示数据的类型或者MIME类型(如:text/xml,text/html,audio/mp3,image/png...)

 date和type属性,一般只需要一个

 通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null

 如果想要两个属性同时设置,要使用setDateAndType方法设置



MianActivity7:调用系统选择(各种)文件,以mp3文件为例,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package  com.example.intent;
 
import  android.app.Activity;
import  android.content.Intent;
import  android.net.Uri;
import  android.os.Bundle;
import  android.view.View;
/**
  * Intent
  * date+type属性
  * type表示数据的类型或者MIME类型(如:text/xml,text/html,audio/mp3,image/png...)
  * date和type属性,一般只需要一个
  * 通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null
  * 如果想要两个属性同时设置,要使用setDateAndType方法设置
 
  * */
public  class  MainActivity7  extends  Activity{
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main7);
     }
     
     public  void  play7(View view){
         Intent intent= new  Intent();
         intent.setAction(Intent.ACTION_VIEW);
         Uri date=Uri.parse( "file:///sdcard/xx.mp3" );
         //intent.setData(date);
         //intent.setDataAndType(data, type);
         intent.setType( "audio/mp3" );
         startActivity(intent);
     }
}

MainActivity8

 本文转自 matengbing 51CTO博客,原文链接:http://blog.51cto.com/matengbing/1883732