Android(安卓)Intent应用
前言
Intent
主要用于应用程序内部的Activity
, Service
和BroadcastReceiver
之间的交互。
1. Intent的属性
-
action
属性,用来表现意图的行动一个
Intent Filter
可以包含多个action
,表示该activity
能接受的动作。启动Activity
的action
值为"android.intent.action.MAIN"
。 -
category
属性,用来表现动作的类别一个
Intent Filter
可以包含多个category
,如果没有指定category
,必须使用默认的"android.intent.category.DEFAULT"
。启动Activity
的category
值为"android.intent.category.LAUNCHER"
。 -
data
属性,是个Uri
对象,用来表示动作要操纵的数据系统内置的几个
Data
属性常量:tel
,号码数据格式,后跟电话号码。mailto
,邮件数据格式,后跟邮件收件人地址。smsto
,短息数据格式,后跟短信接收号码。content
,内容数据格式,后跟需要读取的内容。file
,文件数据格式,后跟文件路径。
-
type
属性,用来对于data
范例的描写。type
属性时mime
类型,常见type
类型有:text/html
,网页text/plain
,普通文本image/*
,图片文件video/*
,视频文件audio/*
,音频文件application/vnd.android.package-archive
,安卓Apk
2. Intent调用
在AndroidManifest.xml
文件中定义一个新的Activity
,自定义action
为 "com.blog.demo.action.intent"
。必须指定category
,如果没有使用默认category
。
显式Intent
调用直接指定组件。
startActivity(new Intent(this, IntentSampleActivity.class));
隐式Intent
调用会在配置文件中查找匹配的组件。Activity
的Category
中包含一个默认的Category
,"android.intent.category.DEFAULT"
。
startActivity(new Intent("com.blog.demo.action.intent"));
如果隐式Intent
调用 "com.blog.demo.action.sample"
,匹配到多个组件,会弹出一个选择弹窗。
可调用Intent.createChooser(Intent, CharSequence)
方法打开多个组件进行选择。
Intent targetIntent = new Intent("com.blog.demo.action.sample");Intent intent = Intent.createChooser(targetIntent, "选择");startActivity(intent);
可以指定多个category
来匹配,
Intent intent = new Intent("com.blog.demo.action.sample");intent.addCategory("com.blog.demo.MY_CATREORY");startActivity(intent);
3. Intent值传递
调用Intent.putExtra()
方法传递值,调用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
-
返回Home界面
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent);
-
进入拨号界面,显示号码10086
Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent);
-
拨打电话,需要添加权限
"android.permission.CALL_PHONE"
Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086")); startActivity(intent);
-
打开网页
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent);
-
拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_CODE_PHOTO); // onActivityResult中调用 Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data");
-
获取图片
Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, REQUEST_CODE_PICTURE); // onActivityResult中调用 Uri uri = data.getData(); Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
-
安装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);
更多相关文章
- android — JNI注册方法说明
- Android(安卓)初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
- 深入理解SharedPrefences实现原理
- Android(安卓)?Pixelflinger 研究
- android 中FragmentActivity中模拟返回键返回上一个Activity效果
- AndroidMainfest.xml文件中的android属性
- 【从源码看Android】01从Looper说起
- 【学习笔记】Android中Service通信
- Android(安卓)Animation动画效果