Intent最基本的用法就是实现活动之间的切换,有两种重载函数
Intent分为显式和隐式:
1).显式,第一种重载函数如下,就是目的意图非常明显
//这段代码实现从FirstActivity中启动SecondActivity
//第一个参数是启动活动的上下文,第二个参数class则是指定想要启动的目标
Intent intent = Intent(FirstActivity.this,SecondActivity.class);
//Activity类提供的方法,只需把Intent传入就可以启动活动了。
startActivity(itent);
下面是我手机上的效果,点击BUTTON 1
会切换到BUTTON 2
2).隐式,使用第二种重载函数,只有一个参数,并没有明确的意图说明。
例如:我在AndroidMainFest的SecondActivity中添加如下action和category:
//为SecondActivity进行注册
<activity android:name=".SecondActivity">
<intent-filter>
//指明当前活动响应的动作和方式
//第一句说明当前活动可以响应com.example.activitytest.ACTION_START这个action
<action android:name="com.example.activitytest.ACTION_START"/>
//android.intent.category.DEFAULT是一种默认的category,startActivity会自动把这个category添加到Intent中
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
再去修改FirstActivity中的按钮button_1点击事件,也可以实现两个活动之前的切换
//第二次修改按钮点击事件,实现Intent的隐式反应
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//这里直接把SecondActivity中action的字符串传入Intent,表明我们想在通过点击这个button_1启动能够响应com.example.activitytest.ACTION_START这个字符串的action
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
}
});
我是这么理解显示和隐式的(哈哈哈哈),隐式中给了你一个英文单词Tibet,你当时的内心一定是WTF??需要去查查词典,所以,就是这个样子。
但是,隐式中需要对应两个因数->action 和 category,只有当这两个都匹配的时候,才能Intent才会被启动.
例如:
//在SecondActivity中action的intent-filter中再添加一个category
//表示Inten还要匹配这个category
<category android:name="com.example.activitytest.MY_CATEGORY"/>
再去FirstActivity中的按钮button_1点击事件中添加如下代码去匹配Intent
intent.addCategory("com.example.activitytest.MY_CATEGORY");
效果就是当在活动一中点击button1时,Intent中的action和category都匹配成功的时候,会打开活动2.
3).更多隐式用法:
例如:在自己的程序里启动其他程序,就是实现程序功能间的互享:
//第三次修改按钮事件,用Intent隐式实现在我的程序中启动另一个程序
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//指定Intent的action是Intent.ACTION_VIEW,这是安卓系统内置的动作
Intent intent = new Intent(Intent.ACTION_VIEW);
//使用uri.parse方法把网址字符串解析成一个uri对象
//再用Intent的setData()方法把Uri对象传入Intent
intent.setData(Uri.parse("http://www.baidu.com"));
//调用startActivity()来实现这个Intent
startActivity(intent);
}
});
以上程序实现了点击button1,程序打开系统内置浏览器的百度网页.
再如,新建活动三ThirdActivity,加入data标签,设置scheme = “http”,代码如下:
//为ThirdActivity注册
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
//这一句指定了数据的协议必须是http
<data android:scheme="http"/>
</intent-filter>
</activity>
因为在活动三种Intent响应的action是action.VIEW同活动一中,所以运行点击活动一的按钮时,会出现如下选项:
选择右边的,跳转到活动三:
当然Intent还可以跳转到打电话的界面:
//第一次重写button3实现拨号的功能
botton3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent的action->Intent.ACTION_DIAL是一个安卓内置动作
Intent intent = new Intent(Intent.ACTION_DIAL);
//data部分指定了协议tel,号码是自己写
intent.setData(Uri.parse("tel:100"));
//开始这个intent
startActivity(intent);
}
});
还可以实现活动之间的数据传递。
/第四次重写按钮事件,用Intent实现向下一个活动传递数据
assert button1 != null;
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "这是Intent传递的信息,将会被打印出来";
//注意了FirstActivity这里是.this,目标是.class,我刚刚把活动一指定为了.class结果出现Cannot resolve constructor 'Intent......的语句
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//显示
intent.putExtra("extra_data",data);//第一个参数是key(键值),第二个是真正的数据
//开始活动
startActivity(intent);
}
});
/第一次重写按钮事件,实现把活动一传来的数据取出并打印
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");//活动一中的key name
//打印数据
Log.d("SecondActivity",data);
结果如下:
还有就是实现向上一个活动返回一个结果,没整明白,后面懂了来搞。