前言

Intent主要用于应用程序内部的Activity, ServiceBroadcastReceiver之间的交互。

1. Intent的属性

  • action属性,用来表现意图的行动

    一个Intent Filter可以包含多个action,表示该activity能接受的动作。启动Activityaction值为 "android.intent.action.MAIN"

  • category属性,用来表现动作的类别

    一个Intent Filter可以包含多个category,如果没有指定category,必须使用默认的 "android.intent.category.DEFAULT"。启动Activitycategory值为 "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调用会在配置文件中查找匹配的组件。ActivityCategory中包含一个默认的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是请求时的参数,resultCodedata是新Activity中返回的值。

protected void onActivityResult(int requestCode, int resultCode, Intent data)

在新Activity中使用setResult()来返回数据,如果没有调用setResult方法,resultCode返回RESULT_CANCELEDdata为空。

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

更多相关文章

  1. android — JNI注册方法说明
  2. Android(安卓)初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  3. 深入理解SharedPrefences实现原理
  4. Android(安卓)?Pixelflinger 研究
  5. android 中FragmentActivity中模拟返回键返回上一个Activity效果
  6. AndroidMainfest.xml文件中的android属性
  7. 【从源码看Android】01从Looper说起
  8. 【学习笔记】Android中Service通信
  9. Android(安卓)Animation动画效果

随机推荐

  1. Android系统自带样式(@android:style/)
  2. Android中TextView中加图片,超链接,部分字
  3. Android(安卓)EditText inputType同时设
  4. Android:布局(相对布局RelativeLayout)
  5. android 杂疑汇总
  6. Android(安卓)开发从入门到精通
  7. Android之android:padding和android:layo
  8. Android学习规划和学习资料
  9. Android动画学习
  10. [Android] TextView的垂直滚动效果