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