Android笔记 定义意图过滤器intent- filter demo

时间:2022-01-28 15:32:58

本例建立在显示意图demo基础上 修改处我会加粗

1修改清单文件 配置第二个界面的意图过滤器

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a66_intent_1"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.a66_intent_1.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>
<activity
android:name="com.example.a66_intent_1.Activity2"
android:label="@string/app_name" >
<strong> <intent-filter>

<!-- 指定动作及类别 -->
<action android:name="com.chj.xxx" />

<category android:name="android.intent.category.DEFAULT" />
<!-- 指定数据 scheme描述规则:语法前缀 host:主机名 port:端口号 path:进一步路径 -->
<!-- android:host="" -->
<!-- android:path="" -->
<!-- android:port="" -->
<!-- mimeType数据类型 如 JPG 对应image/JPEG 用到时可查询 -->
<data
android:mimeType="vnd.android.cursor.item/haha"
android:scheme="chj" />
</intent-filter></strong>
</activity>
</application>

</manifest>
2修改第一个界面的布局 添加一个按钮

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="界面1" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="跳转" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click3"
android:text="跳转到系统应用" />

<strong> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click4"
android:text="隐式意图跳转" /></strong>

</LinearLayout>

3第一Activity添加click4点击事件

package com.example.a66_intent_1;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

// 四种方法来进行显示意图跳转
public void click(View view) {
Intent intent = new Intent(MainActivity.this, Activity2.class);
startActivity(intent);
}

// public void click(View view) {
// Intent intent =new Intent();
// intent.setClassName(MainActivity.this,
// "com.example.a66_intent_1.Activity2");
// startActivity(intent);
// }

// public void click() {
// Intent intent =new Intent();
// intent.setClass(MainActivity.this, Activity2.class);
// startActivity(intent);
// }
// 以上三种方式跳转意思一致

public void click3(View view) {
Intent intent = new Intent();
// setClassName方法有俩种 此处与24行的是不同的setClassName方法
// 一般系统应用包名可能会被开发商更改 因此可能执行不成功 接下来会学习隐式意图来跳转到系统组件界面
intent.setClassName("com.sec.android.gallery3d",
"com.sec.android.gallery3d.app.Gallery");
startActivity(intent);
}

// 隐式意图跳转到第二个界面

<strong>// 显示意图根据包名类名激活组件 二隐式意图根据动作等参数实现组件的激活
public void click4(View view) {
Intent intent = new Intent();
// 设置跳转动作和类别 设置为第二个界面指定的动作和类别(之前在清单文件配置的)
//category.一般用于指定附加信息 环境参数 没有就使用默认值
intent.setAction("com.chj.xxx");
intent.addCategory("android.intent.category.DEFAULT");//最好都写上 避免出错
// //设置跳转数据 之前在清单文件配置的
// intent.setData(Uri.parse("chj:hehe"));
// //指定数据mimeType 与清单文件一致
// intent.setType("vnd.android.cursor.item/haha");
// 如果既有数据又有mineType则使用以下方法
intent.setDataAndType(Uri.parse("chj:hehe"),
"vnd.android.cursor.item/haha");

startActivity(intent);
}</strong>

}
4第二个Activity可以获取第一界面的数据

package com.example.a66_intent_1;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class Activity2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2);
//获取到激活它的intent
Intent intent = getIntent();
<strong>//获取到intent里的数据
Uri uri =intent.getData();
String res = uri.toString();
Toast.makeText(this, "取得数据"+res, Toast.LENGTH_SHORT).show();</strong>

}

public void click2(View view) {
Intent intent =new Intent();
intent.setClass(Activity2.this, MainActivity.class);
startActivity(intent);
}
}