Android Intent应用
来源:互联网 发布:训练眼睛的软件 编辑:程序博客网 时间:2024/06/06 17:40
Android Intent应用
Intent主要用于应用程序内部的activity, service和broadcast receiver之间的交互。
1、Intent的属性
(1) action属性,用来表现意图的行动一个Intent Filter可以包含多个action,表示该activity能接受的动作。启动Activity的action值为android.intent.action.MAIN。
(2) category属性,用来表现动作的类别
一个Intent Filter可以包含多个category,如果没有指定category,必须使用默认的android.intent.category.DEFAULT。启动Activity的category值为android.intent.category.LAUNCHER
(3) data属性,用来表示动作要操纵的数据
data属性的值是个Uri对象。系统内置的几个Data属性常量
- tel,号码数据格式,后跟电话号码。
- mailto,邮件数据格式,后跟邮件收件人地址。
- smsto,短息数据格式,后跟短信接收号码。
- content,内容数据格式,后跟需要读取的内容。
- file,文件数据格式,后跟文件路径。
type属性时mime类型,常见type类型有
- text/html,网页
- text/plain,普通文本
- image/*,图片文件
- video/*,视频文件
- audio/*,音频文件
- application/vnd.android.package-archive,安卓Apk
2、Intent调用
(1) 显示调用Intent在AndroidManifest.xml文件中定义一个新的Activity
<activityandroid:name=".IntentActivity"><intent-filter><action android:name="com.blog.demo.action.intent" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>显式Intent就是知道要启动的组件名称,在Intent中明确的指定了这个组件。
Intent intent = new Intent(this, IntentActivity.class);startActivity(intent);(2) 隐式调用Intent
隐式Intent不知道要启动的组件名称,只知道一个Intent动作要执行,系统会根据manifest file中的intent filter找匹配的组件。
Intent intent = new Intent("com.blog.demo.action.intent");startActivity(intent);注意点就是Activity的Category包含一个默认的Category,android.intent.category.DEFAULT。
(3) 多activity定义同一action
多activity定义了相同的action,会弹出一个选择弹窗。或者调用Intent.createChooser
Intent targetIntent = new Intent("com.blog.demo.action.intent");Intent intent = Intent.createChooser(targetIntent, "选择");startActivity(targetIntent);(4) 多category
<activityandroid:name=".component.IntentActivity"><intent-filter><action android:name="com.blog.demo.action.intent" /><category android:name="android.intent.category.DEFAULT" /><category android:name="com.blog.demo.MY_CATREORY" /></intent-filter></activity>如果在activity定义了多个category,可以在intent中指定
Intent intent = new Intent(this, IntentActivity.class);intent.addCategory("com.blog.demo.MY_CATREORY");startActivity(intent);
3、Intent值传递
调用Intent.putExtra方法传递值,在新的activity调用getIntent().getXXXExtra方法获取。4、启动Activity的方式
一种是直接使用startActivity,另外一种就是使用startActivityForResult。startActivityForResult的主要作用就是可以回传数据。requestCode是一个常量,用于区分回调的来源。
startActivityForResult(Intent intent, int requestCode)onActivityResult的主要作用就是来处理回调数据,其中requestCode是请求时的参数,resultCode和data是新Activity中返回的值。
protected void onActivityResult(int requestCode, int resultCode, Intent data)在新Activity中使用setResult来返回数据,如果没有调用setResult方法,resultCode返回RESULT_CANCELED,data为空。
setResult(int resultCode)setResult(int resultCode, Intent data)
5、常用Intent
(1) 返回Home界面Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);(2) 进入拨号界面,显示号码10086
Intent intent = new Intent(Intent.ACTION_DIAL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);(3) 拨打电话,需要添加权限android.permission.CALL_PHONE
Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);(4) 打开网页
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);(5) 拍照
String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/phone.jpg";Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(outputFile))); // 指定输出文件startActivityForResult(intent, REQUEST_CODE_PHOTO);(6) 获取图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("image/*");startActivityForResult(intent, REQUEST_CODE_PICTURE);成功后在onActivityResult中调用
Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data");(7) 安装apk
Intent intent = new Intent(Intent.ACTION_VIEW);Uri data = Uri.fromFile(new File("xxx.apk"));intent.setDataAndType(data, "application/vnd.android.package-archive");startActivity(intent);
阅读全文