Android Intent详细介绍及使用说明(显式、隐式和值传递)

Intent 是Android程序中各个组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件中传递数据。我们一般可以用Intent启动活动(Activity)、启动服务(service)、以及发送广播(broadcastreceiver)等。

Intent用法大致分为两种,一种是显式Intent,一种是隐式Intent。

一、显式Intent

Intent有多个构造函数的重载,我们一般用Intent(Context packageContext,Class<?>cls)这个构造方法,其中接收的第一个参数Context要求提供一个启动活动的上下文,第二个参数Class指定想要启动的目标活动。Intent也叫意图,就是想要做什么地意思。比如在主活动中加入加入一个Button,通过点击Button来开启其他活动,我们可以这样做:

button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 传递意图,启动一个活动Intent intent = new Intent(MainActivity.this, OtherActivity.class);startActivity(intent);}});

那么如何启动服务呢?同样需要实例化一个服务(Service,稍后博客会有相关服务知识的介绍),然后可以在代码中这样写:

Intent intent = new Intent(MainActivity.this, DownLoadService.class); startService(intent);

这样就可以了。

那么广播呢?下面就介绍隐式Intent,在里边简单介绍。

二、隐式Intent

隐式Intent相比显式Intent含蓄了好多,不明确指出想要启动那一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮助我们找出合适的活动去启动。那么我们怎么可以像上边那样启动OtherActivity呢?

1.打开项目下的AndroidManifest.xml,找到OhterActivity的<activity>标签。

2.在标签中配置<intent-filter>的内容

具体如下:

<activityandroid:name="com.example.androidintent.OtherActivity" ><intent-filter ><action android:name="android.example.androidintent.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity>

3.在需要启动活动的地方这样写就行了:

Intent intent = new Intent("android.example.androidintent.ACTION_START");startActivity(intent);

那么出现了一个问题,<action>和<category>同时匹配才能像相应启动一个活动,那上边为什么可以呢?

其实是因为android.intent.category.DEFAULT 是一种默认的category,在调用MainActivity的时候会自动将这个category添加到Intent中。

我们可以这样写:

Intent intent = new Intent("android.example.androidintent.ACTION_START"); intent.addCategory("android.example.androidintent.OHTER_CATEGORY"); startActivity(intent);

可以看到我们通过调用Intent中的addCategory()方法来添加一个category,,那么怎么才能正常启动活动呢?这时就必须在配置文件AndroidManifest.xml中把这条category添加上去,这样写程序就不报错了:

<activityandroid:name="com.example.androidintent.OtherActivity" ><intent-filter ><action android:name="android.example.androidintent.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/><span style="color:#ff0000;"><category android:name="android.example.androidintent.OHTER_CATEGORY"/></span></intent-filter></activity>

我们现在可以试着发一个广播了,很简单,广播以后会写篇文章,在这我们就默认程序中有一个广播,怎么去传递意图呢?

Intent intent = new Intent("com.example.broadcast.MY_BROADCAST");

sendBroadcast(intent);

使用隐式的Intent我们不仅可以启动自己程序内的活动,还可以启动其他应用的活动,这使得Android多个应用程序之间的功能共享成为可能,比如说你的应用程序中需要打开一个网页,我们就可以调用系统的浏览器来打开这个网页。怎么写呢?

Intent intent = new Intent(Intent.ACTION_VIEW); // Android系统内置的一个动作// 通过Uri.parse()方法将一个网址字符串解析成一个Uri对象,再调用Intent的setData()// 方法将这个Uri对象传递出去intent.setData(Uri.parse(""));startActivity(intent);

当然我们也可以调用系统拨号界面:

Intent intent = new Intent(Intent.ACTION_DIAL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);

好了,基本都讲完了,那个现在在说一下Intent携带数据,通过调用intent.putExtra("传递的名",需要传递的参数)方法来传递参数;

Intent intent = new Intent(MainActivity.this,OtherActivity.class);intent.putExtra("name", data);startActivity(intent);

那么如何接收呢?

Intent intent = getIntent();String data = intent.getStringExtra("name");

这样就可以接收了。

那么我们怎么可以再当前活动结束的时候,将数据返回上一个活动呢,这时候就需要用到startActivityForResult(intent, requestCode),其中第一个参数是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。

我们可以再MAinActivity的Button点击事件中这样写

都成为命途中美丽的点缀,看天,看雪,安安静静,不言不语都是好风景。

Android Intent详细介绍及使用说明(显式、隐式和值传递)

相关文章:

你感兴趣的文章:

标签云: