//通过制定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);
}
public void start1(View view){
Intent intent=new Intent(this,MainActivity9.class);
startActivity(intent);
}
通过action属性查找启动activity,必须在清单文件中进行配置
//通过action属性查找启动activity
public void start2(View view){
Intent intent=new Intent();
//设置动作,实际上action就是字符串标记而已
intent.setAction(MainActivity3.MY_ACTION);
startActivity(intent);
}
MainActivity3
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" />
<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>
加入的类别越多,越精确,如果有找不到的类别会报错(假设有两个类别,一个类别未找到,则报错)
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
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
<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);
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的配置
<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,p_w_picpath/png...)
date和type属性,一般只需要一个
通过setDate方法会把type实行设置为null,相反,设置setType也会把date属性设置为null
如果想要两个属性同时设置,要使用setDateAndType方法设置
MianActivity7:调用系统选择(各种)文件,以mp3文件为例,
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,p_w_picpath/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
package com.example.intent;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
/**
* activity的启动模式:4种
* 1.standard 标准模式,每次启动都会创建一个新的activity,加入目标任务的栈顶
* 2.singleTop,判断当前任务栈顶是否存在相同的activity,如果存在直接使用
* 如果不存在,那么创建新的activity对象放入栈顶
* 3.singleTask:在任务栈中是会判断否存在相同的activity,如果存在,那么会清除该activity之上的其他activity对象来显示
* 如果不存在,创建新的activity对象放入栈顶
* 4.singleInstance:会在一个新的任务栈中创建activity,并且该任务栈中只允许存在一个activity实例,
* 其他调用该activity的组件会直接使用该任务栈中的activity对象
*
* Intent的flags属性也可以指定启动模式
*
*
*
* */
public class MainActivity8 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main8);
}
public void start1(View view){
Intent intent=new Intent(this,MainActivity9.class);
startActivity(intent);
}
public void start2(View view){
Intent intent=new Intent(this,MainActivity8.class);
//相当于singleTask
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//相当于singleTop
//intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。