当前位置:   article > 正文

Android隐式意图_android 隐式意图 action打开activity

android 隐式意图 action打开activity

所有Android应用都由一个或多个活动组成,另外还包括其他一些组件如布局。活动是用户可以完成的一个确定的事情。使用意图可以启动其他应用中的活动。其过程就是第一个活动向Android传递一个意图,Android检查这个意图,然后Android要求第二个活动启动。
可以创建一个意图来启动另一个活动,尽管这个活动在另一个应用中。
现在的问题是怎么知道用户设备上有哪些活动?怎么知道哪些活动适合我们要完成的任务?怎么知道如何使用这些活动?

创建意图
所有这些问题都可以使用动作action来解决

Intent intent = new Intent(Intent.ACTION_SEND);
  • 1

以上是创建意图来指定一个动作的语法,Android提供了很多可用的标准动作:
Intent.ACTION_DIAL拨号,Intent.ACTION_WEB_SEARCH完成web搜索,Intent.ACTION_SEND发送消息…

增加额外的消息
一旦指定了想要使用的动作,还可以为它增加额外的信息。我们希望随意传递一些文本,这些文本将构成我们要发送的消息的消息体。为此可以使用以下代码给意图:

intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, messageText);
//这些属性是Intent.ACTION_SEND的特有属性。并不是所有动作都有这个属性
  • 1
  • 2
  • 3

这里的messageText是你想发送的文本。这就告诉Android你希望这个活动能处理MIME数据类型为“text/plain”的数据,另外还会告诉它要发送的文本是什么。
另外如果还想增加其他额外信息,还可以另外再调用putExtra()方法。例如,如果你想指定消息的主题,可以使用以下代码来设置:

intent.putExtra(Intent.EXTRA_SUBJECT, subject);
  • 1

这里的subject是消息的主题。
修改上一节的CreateMessageActivity.java文件

package com.hfad.mymessenger;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

//确保继承了Activity类
public class CreateMessageActivity extends Activity {
	@override
	//创建活动时会调用onCreate()方法
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_create_message);
	}
	
	//单击按钮时会调用这个方法
	public void onSendMessage(View view){
		//从ID为message的可编辑文本域得到文本
		EditText messageView = (EditText)findViewById(R.id.message);
		String messageText = messageView.getText().toString();

		//不再创建一个显式意图指定ReceiveMessageActivity
		//这里创建了一个使用发送动作的隐式意图
		Intent intent = new Intent(Intent.ACTION_SEND);
		intent.setType("text/plain");
		intent.putExtra(Intent.EXTRA_TEXT, messageText);

		//启动意图中指定的活动
		startActivity(intent);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

发生了什么
1、调用onSendMessage()方法时,会创建一个意图。startActivity()方法将这个意图传给Android。这个意图指定了动作ACTION_SEND,MIME类型为text/plain。
2、Android了解到这个意图只能传递到能处理ACTION_SEND和text/plain数据的活动。Android检查用户设备上的所有活动,查找能接收这个意图的活动。(如果没有活动能处理这个意图,会抛出一个ActivityNotException)
3、如果只有一个活动能接收这个意图,Android会让这个活动启动并传入意图。
如果有多个活动都能接收这个意图,Android会显示一个活动选择器对话框,让用户选择要使用的活动
4、用户选择他想要的活动后,Android让这个活动启动,并向这个活动传入意图,这个活动会在新消息中显示意图中包含的额外文本。

意图过滤器
为Android提供一个意图时,它必须明确哪个活动或哪些活动能处理这个意图。这个过程称为意图解析
使用隐式意图时,Android使用意图中的信息来确定哪些组件能接收这个意图。为此,它要检查每个应用AndroidManifest.xml中的意图过滤器。
意图过滤器指出各个组件可以接收哪些类型的意图。
举个例子,下面的记录对应一个可以处理ACTION_SEND动作的活动。这个活动能接收MIME类型为text/plain或image的数据。

<activity android:name="ShareActivity">
	<intent-filter>
		<!--这会告诉Android这个活动可以处理ACTION_SEND -->
		<action android:name="android.intent.action.SEND" />
		<!--意图处理器必须包含类别default,否则无法接收隐式意图 -->
		<category android:name="android.intent.category.DEFAULT" />
		<!--下面是这个活动能处理的数据类型 -->
		<data android:mimeType="text/plain" />
		<data android:mimeType="image/*" />
	</intent-filter>
</activity>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/236130?site
推荐阅读
相关标签
  

闽ICP备14008679号