2.3 使用 Intent在活动之间穿梭
点击App图标,直接跳到主活动,那么进入活动,就要用Intent了。
2.3.1 显式 Intent
首先,创建第二个SeocndActivity.
这里其实非常简单,就是说在第一个activity的按钮事件中加入,intent(context, 目标事件)即可。
button1.setOnClickListener(new View.OnClickListener(){ // 创建监听 @Override public void onClick(View v){ Intent intent = new Intent(FirstActi.this, SecondActivity.class); // (context,想要启动的目标活动) startActivity(intent); }
然后利用startActivity()方法来启动活动。
这样,在第一个activity中点击按钮,就会跳入第二个activity。这里的intent目标非常明显,所以叫显式intent。
2.3.2 隐式intent
隐式intent并不明确指出我们想要启动哪个活动。它指定一系列抽象的action & category,由系统分析,找出合适的活动(可以响应隐式intent的活动)去启动。a&c要同时匹配。
此时,通过配置manifest中activity 中<intent-filter>标签中的a&c(见上一段),指定当前活动能够响应的a&c。
<activity android:name=".SecondActivity"></activity> <intent-filter> <action android:name="com.mike.cha2_activity.ACTION_START"/> // 这里的路径如果是对的话都会有自动代码 <category android:name="android.intent.category.DEFAULT"/> //默认的cat </intent-filter>
同时更改intent函数
public void onClick(View v){ Intent intent = new Intent("com.mike.cha2_activity.ACTION_START"); // 这是用了intent另外一个构造函数,将action的字符串传入 startActivity(intent); }
说明要启动可以响应"com.ex......"这个action的活动。而上面的cat是默认的cat,调用startActivity()方法自动添加Cat到Intent. 启动,成功。
intent中,action只能有一个,cat可以有多个。 intent.addCat("")即可添加
intent.addCategory("com.mike.cha2_activity.MY_CATEGORY");
此时在要启动的secondAct的Mani中,<intent-filter>内添加相应的<cat 即可。
2.3.3 更多隐式Intent用法
不仅对于程序内部,也可以用于程序之间(这就是说我们的分享之类的东西)
改写button_1的代码
public void onClick(View v){ Intent intent = new Intent(Intent.ACTION_VIEW); // 指定了Intent的action是 Intent.ACTION_VIEW intent.setData(Uri.parse("http://www.baidu.com")); // Uri.parse("")方法解析字符串成为uri对象,再setData()方法把对象传递进去 startActivity(intent); }
这时候,点击button_1就会启动浏览器访问 百度。实现了程序间的穿梭。
新建一个ThirdActivity,写入一个button_3,在Manifest中对ThirdActivity代码改写
<activity android:name=".ThirdActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> //当前活动能够响应的action是VIEW常量 <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="http"/> //相应的数据协议必须是http协议 </intent-filter> </activity>
<data> 标签中更加精确地指定,响应什么类型的数据。
android:scheme,指定数据的协议部分
android:host 主机名部分,例如www.baidu.com
android:port 端口,一般在主机名后面
android:path 路径,一般在端口后面
android:mimeType 可以处理的数据类型