Intent

在一个项目之中,会由多个Activity法度所构成,那么此时,这么多个Activity法度之间就须要进行通信,而这之间的通信就依附Intent完成。

Activity法度支撑的Intent操纵办法:

No.

办法

描述

1

Public void startActivity(Intent intent)

启动一个Activity,并经由过程Intent传送数据

2

Public void startActivityForResult(Intent intent,

int requestCode)

启动并接管另一个Activity法度回传数据,当requestCode大于0才可以触发

onActivityResult()

3

Public Intent getIntent()

返回启动当前Activity法度的Intent

4

Protected void onActivityResult(int requestCode,

int resultCode,Intent data)

当须要接管Intent回传数据的时辰覆写此办法对回传操纵进行处理惩罚

5

Public void finish()

调用此办法会返回之前的Activity法度,并主动调用onActivityResult()办法

?

一、Intent带返回值

Intent02_Send_Activity.java

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class Intent02_Send_Activity extends Activity {	private Button mybut = null;	private TextView msg = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.send_main);		this.mybut = (Button) super.findViewById(R.id.mybut);		this.msg = (TextView) super.findViewById(R.id.msg);		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			Intent intent = new Intent(Intent02_Send_Activity.this,					Receive.class);			intent.putExtra("myinfo", "你好");			// 带返回值的跳转,若是1大于0,则可以接管			Intent02_Send_Activity.this.startActivityForResult(intent, 1);			// 不带返回值的跳转 Intent_Send01Activity.this.startActivity(it); // 跳转		}	}	@Override	protected void onActivityResult(int requestCode, int resultCode,			Intent intent) {		switch (resultCode) {		case RESULT_OK:			Intent02_Send_Activity.this.msg.setText("返回的内容是:"					+ intent.getStringExtra("retmsg"));			break;		case RESULT_CANCELED:			Intent02_Send_Activity.this.msg.setText("操纵作废。");			break;		default:			break;		}	}}
?

Receive.java

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class Receive extends Activity {	private TextView show = null;	private Button retbut = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.receive_main);		this.show = (TextView) super.findViewById(R.id.show);		this.retbut = (Button) super.findViewById(R.id.retbut);		Intent intent = super.getIntent(); // 取合适前的Intent		String info = intent.getStringExtra("myinfo");		this.show.setText(info);		this.retbut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			Receive.this.getIntent().putExtra("retmsg", "故国:中国");			Receive.this.setResult(RESULT_OK, Receive.this.getIntent());			Receive.this.finish();		}	}}
?

?

?

前面我们说了Intent的根蒂根基操纵,设置跳转时的数据都是附加数据(Extrs),那么除了这些附加数据之外,也可以传递更多的内容,并且调用本机的一些已经为用户供给好的Intent操纵。

Intent数据传递实际上分为以下六种数据:操纵(Action)、数据(Data)、数据类型(Type)、操纵类别(Category)、附件信息(Extras)、组件(Component)、标记(Flags);

?

1、操纵(Action):设置该Intent会触发的操纵类型,可以经由过程setAction()办法进行设置

No.

Action名称

AndroidManifest.xml设备名称

描述

1

ACTION_MAIN

android.intent.action. MAIN

作为一个法度的进口,不须要接管数据

2

ACTION_VIEW

android.intent.action. VIEW

用于数据的显示

3

ACTION_DIAL

android.intent.action. DIAL

调用德律风拨号法度

4

ACTION_EDIT

android.intent.action. EDIT

用于编辑给定的数据

5

ACTION_PICK

android.intent.action. PICK

从特定的一组数据之中进行数据的选择操纵

6

ACTION_RUN

android.intent.action. RUN

运行数据

7

ACTION_SEND

android.intent.action. SEND

调用发送短信法度

8

ACTION_GET_CONTENT

android.intent.action. GET_CONTENT

按照指定的Type来选择打开操纵内容的Intent

9

ACTION_CHOOSER

android.intent.action. CHOOSER

创建文件操纵选择器

相当于经由过程Action指定要操纵的类型

?

2、数据(Data)

描述Intent所操纵数据的URI及类型,可以经由过程setData()进行设置,不合的操纵对应着不合的Data

No.

操纵类型

Data(Uri)格局

典范

1

浏览网页

http://网页地址

http://www.baidu.com

2

拨打德律风

tel:德律风号码

tel:13956027313

3

发送短信

smsto:短信接管人号码

smsto:13956027313

4

查找SD卡文件

file:///sdcard/文件or目次

file:///sdcard/pic.jpg

5

显示地图

geo:坐标,坐标

geo:32,-75

这些数据是和跳转的法度接管标准有关。

?

3、数据的类型(Type):指定要传送数据的MIME类型,可以直接经由过程setType()办法进行设置。

No.

感化

MIME类型

1

发送短信

vnd.android-dir/mms-sms

2

设置图片

Image/png

3

通俗文本

Text/plain

4

设置音乐

Audio/mp3

?

4、操纵的类别(Category):对履行操纵的类别进行描述,可以经由过程addCategory()办法设置多个类别

No.

Category名称

AndroidManifest.xml设备名称

描述

1

CATEGORY_LAUNCHER

android.intent.category. LAUNCHER

默示此法度显示在应用法度列表中

2

CATEGORY_HOME

android.intent.category. HOME

显示主桌面,即开机时的第一个界面

3

CATEGORY_PREFERENCE

android.intent.category. PREFERENCE

运行后将呈现一个选择面板

4

CATEGORY_BROWSABLE

android.intent.category. BROWSABLE

显示一张图片、email信息

5

CATEGORY_DEFAULT

android.intent.category. DEFAULT

设置一个操纵的默认履行

6

CATEGORY_OPENABLE

android.intent.category. OPENABLE

当Action设置为GET_CONTENT时用于打开指定的Uri

?

5、附件信息(Extras):传递的是一组键值对,可以应用pubExtra()办法进行设置,首要的功能是传递数据(Uri)所须要的一些额外的操纵信息

No.

操纵数据

附加信息

感化

1

短信操纵

sms_body

默示要发送短信的内容

2

彩信操纵

Intent.EXTRA_STREAM

设置发送彩信的内容

3

指定接管人

Intent.EXTRA_BCC

指定接管Email或信息的接管人

4

Email接管人

Intent.EXTRA_EMAIL

用于指定email的接管人,接管一个数组

5

Email题目

Intent.EXTRA_SUBJECT

用于指定email邮件的题目

6

Email内容

Intent.EXTRA_TEXT

用于指定email邮件的内容

?

6、组件(Component):指了然将要处理惩罚的Activity法度,所有的组件信息都被封装在一个ComponentName对象之中,这些组件必须在AndroidManifest.xml文件的“<application>”中注册。

?

7、标识(Flags):用于指导android体系如何加载并运行一个操纵,可以经由过程addFlags()办法进行增长。

?

下面我们来看看Intent内置功能的典范。

二、打开网页

?

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Intent03Activity extends Activity {	/** Called when the activity is first created. */	private Button mybut = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			Uri uri = Uri.parse("http://xdwangiflytek.iteye.com/"); // 设置操纵的路径			Intent intent = new Intent();			intent.setAction(Intent.ACTION_VIEW); // 设置要操纵的Action			intent.setData(uri); // 要设置的数据			Intent03Activity.this.startActivity(intent); // 履行跳转		}	}}
?

?

三、拨打德律风(进入打德律风界面,值填充完成)

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class Intent04Activity extends Activity {	/** Called when the activity is first created. */	private Button mybut = null;	private EditText tel = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件		this.tel = (EditText) super.findViewById(R.id.tel); // 取得组件		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			String telStr = Intent04Activity.this.tel.getText().toString(); // 取得输入信息			Uri uri = Uri.parse("tel:" + telStr); // 设置操纵的路径			Intent intent = new Intent();			intent.setAction(Intent.ACTION_DIAL); // 设置要操纵的Action			intent.setData(uri); // 要设置的数据			Intent04Activity.this.startActivity(intent); // 履行跳转		}	}}
?

?

四、直接拨打德律风呼出

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class Intent05Activity extends Activity {	/** Called when the activity is first created. */	private Button mybut = null;	private EditText tel = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件		this.tel = (EditText) super.findViewById(R.id.tel); // 取得组件		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			String telStr = Intent05Activity.this.tel.getText().toString(); // 取得输入信息			Uri uri = Uri.parse("tel:" + telStr); // 设置操纵的路径			Intent intent = new Intent();			intent.setAction(Intent.ACTION_CALL); // 设置要操纵的Action			intent.setData(uri); // 要设置的数据			Intent05Activity.this.startActivity(intent); // 履行跳转		}	}}

?添加权限:

?

<uses-permission android:name="android.permission.CALL_PHONE" />
?

?

五、发送短信息(进入发短信界面,值填充完成)

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class Intent06Activity extends Activity {	/** Called when the activity is first created. */	private Button mybut = null;	private EditText tel = null;	private EditText content = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件		this.tel = (EditText) super.findViewById(R.id.tel); // 取得组件		this.content = (EditText) super.findViewById(R.id.content); // 取得组件		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			String telStr = Intent06Activity.this.tel.getText().toString(); // 取得输入信息			String note = Intent06Activity.this.content.getText().toString(); // 取得内容			Uri uri = Uri.parse("smsto:" + telStr); // 设置操纵的路径			Intent intent = new Intent();			intent.setAction(Intent.ACTION_SENDTO); // 设置要操纵的Action			intent.putExtra("sms_body", note); // 设置短信内容			intent.setType("vnd.android-dir/mms-sms"); // 短信的MIME类型			intent.setData(uri); // 要设置的数据			Intent06Activity.this.startActivity(intent); // 履行跳转		}	}}

?

六、发送彩信

?

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Intent07Activity extends Activity {	/** Called when the activity is first created. */	private Button mybut = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			Uri uri = Uri.parse("file:///sdcard/mypic.jpg"); // 设置操纵的路径			Intent intent = new Intent();			intent.setAction(Intent.ACTION_SEND); // 设置要操纵的Action			intent.putExtra("address", "13956027313"); // 设置短信内容			intent.putExtra("sms_body", "安徽合肥"); // 设置短信内容			intent.putExtra(Intent.EXTRA_STREAM, uri); // 设置短信内容			intent.setType("image/png"); // 短信的MIME类型			Intent07Activity.this.startActivity(intent); // 履行跳转		}	}}
?

?

七、发送邮件

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Intent08Activity extends Activity {	/** Called when the activity is first created. */	private Button mybut = null;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (Button) super.findViewById(R.id.mybut); // 取得组件		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			Intent emailIntent = new Intent(Intent.ACTION_SEND);			emailIntent.setType("plain/text"); // 设置类型			String address[] = new String[] { "xdwangiflytek@gmail.com" }; // 邮件地址			String subject = "xdwang";			String content = "xdwangiflytek.iteye.com";			emailIntent.putExtra(Intent.EXTRA_EMAIL, address);			emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);			emailIntent.putExtra(Intent.EXTRA_TEXT, content);			Intent08Activity.this.startActivity(emailIntent); // 履行跳转		}	}}
?

?

八、显示通信录

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;public class Intent09Activity extends Activity {	/** Called when the activity is first created. */	private static final int PICK_CONTACT_SUBACTIVITY = 1;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		Uri uri = Uri.parse("content://contacts/people");		Intent intent = new Intent(Intent.ACTION_PICK, uri);		super.startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);	}	@Override	protected void onActivityResult(int requestCode, int resultCode, Intent data) {		super.onActivityResult(requestCode, resultCode, data);		switch (requestCode) {		case PICK_CONTACT_SUBACTIVITY:		}	}}
?

?

九、调用ContentProvider

package com.iflytek.demo;import android.app.Activity;import android.content.ContentUris;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.widget.Toast;public class Intent10Activity extends Activity {	/** Called when the activity is first created. */	private static final int PICK_CONTACT_SUBACTIVITY = 1;	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		Uri uri = Uri.parse("content://contacts/people");		Intent intent = new Intent(Intent.ACTION_PICK, uri);		super.startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);	}	@Override	protected void onActivityResult(int requestCode, int resultCode, Intent data) {		super.onActivityResult(requestCode, resultCode, data);		switch (requestCode) {		case PICK_CONTACT_SUBACTIVITY:			Uri ret = data.getData(); // 接管返回的数据			String phoneSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID					+ "=?"; // 设置查询前提			String[] phoneSelectionArgs = { String.valueOf(ContentUris					.parseId(ret)) }; // 返回的ID			Cursor c = super.managedQuery(					ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,					phoneSelection, phoneSelectionArgs, null);			StringBuffer buf = new StringBuffer();			buf.append("德律风号码是:");			for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {				buf.append(						c.getString(c								.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)))						.append("、");			}			Toast.makeText(this, buf, Toast.LENGTH_LONG).show();		}	}}

?添加读取权限

?

  <uses-permission android:name="android.permission.READ_CONTACTS" />
?

?

十、创建选择器(打开图库)

Intent11Activity.java

package com.iflytek.demo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;public class Intent11Activity extends Activity {	private ImageButton mybut = null;	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setContentView(R.layout.main);		this.mybut = (ImageButton) super.findViewById(R.id.mybut);		this.mybut.setOnClickListener(new OnClickListenerImpl());	}	private class OnClickListenerImpl implements OnClickListener {		@Override		public void onClick(View v) {			Intent intent = new Intent();			intent.setAction(Intent.ACTION_GET_CONTENT);			intent.setType("image/*");			Intent11Activity.this.startActivity(Intent.createChooser(intent,					"选择图片浏览对象"));		}	}}
?

?

ImageViewActivity.java

package com.iflytek.demo;import android.app.Activity;import android.os.Bundle;import android.widget.ImageView;public class ImageViewActivity extends Activity {	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		super.setTitle("查看图片");		ImageView img = new ImageView(this);		img.setImageResource(R.drawable.ic_launcher);		super.setContentView(img);	}}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值