上一章我们讲了activity基本界面的实现。可是,上次讲的只有一个界面,在大部分APP中都是很多界面相互跳转的!那么,我们如何实现在不同的Activity或其他组件中进行跳转或者其他操作呢,带着这个疑问,今天给大家带来一个android开发中非常重要的组件,Intent。
Intent负责对应用中的个大组件进行交互,每一次交互,我们将它视为一个动作,这个动作可能实际数据,附加数据。android则根据Intent的携带的数据,找到相应的组件,将Intent传递给他!那么在这里Intent就起到了一个媒介的作用!她为两个组件中通讯搭建了桥梁,为两个或多个组件提供互相调用的信息!
Intent主要由两个分类,显式意图和隐式意图
1. 显式意图:多用于本应用将Activity间的通讯,调用Intent.setClass()方法为明确指定组件名是显式意图!明确指定了应该传递数据到哪个组件!
2. 隐式意图:没有明确指定组件名的为隐式意图,多用于跨应用启动Activity,如打电话什么的!
显式意图就不多说了,大家到网上一搜一大堆,我在这说一下隐式意图!
隐式意图包括:Action(动作),category(附加数据),Data(数据),Type(类型),其实这就跟我们上面说的差不多,隐式意图通过这几项构成了一个动作!举个小例子吧,在一些重要场合下,各种大拿见了女士要亲吻对方的手。首先亲吻的整个过程就是一个Action(动作),这位女士代表了Data,而Type就代表了这位女士的性别(这样写有点尴尬了,本来就是个女的),而亲吻过后在告诉这位女士欢迎你这就是category(附加数据)!好了,就这样吧!下面直接上实例!
拨打电话(调用的是SDK提供的方法),一定要在AndroidMenifest文件里加上这个权限:<uses-permission android:name="android.permission.CALL_PHONE" />
package com.example.administrator.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
/**
* Created by Administrator on 2017/3/11.
*/
public class DemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
initView();
}
private void initView() {
Button playphone = (Button) findViewById(R.id.playphone);
playphone.setOnClickListener(new Myplayphoneclick());
}
class Myplayphoneclick implements View.OnClickListener{
@Override
public void onClick(View v) {
//拨打电话按钮的点击事件
//实现拨打电话
//实现方法隐式意图调用框架层提供的拨打点话功能
//实例化Intent
Intent intent = new Intent();
//告诉应用我要干什么,
intent.setAction(Intent.ACTION_DIAL);
//创建Data,被执行对象
Uri data = Uri.parse("tel"+"135076369xx");
//设置被执行对象
intent.setData(data);
//开始拨打电话
startActivity(intent);
}
}
}
1.设置清单文件过滤器
<activity android:name=".DemoActivity2">
<!--过滤器-->
<intent-filter>
<!--自定义动作-->
<action android:name="com.example.xxx"></action>
<!--自定义(Scheme)与(host)-->
<data android:host="www.baidu.com"
android:path="/person"
android:scheme="Demoxxx"></data>
<!--自定义类型-->
<data android:mimeType="person/people" />
<!--附加类型-->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
2.触发事件中实现,这个只是一个简单的样例,实际开发中,除非由特殊需求,否则很少用到自定义的!
public void click(View v){
Intent intent = new Intent();
intent.setAction("com.example.xxx");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.parse("Demoxxx://www.baidu.com/person"),
"person/people");
startActivity(intent);
}