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); }}