梳理了几天,终于开始着手写Android的复习博文。其中参考了书本和众多大神的技术文章,总结出一些笔记,供以后参考。

众所周知,Intent(意图)是一个消息传递对象,承担着Android应用程序三大核心组件相互间的通信功能。

  • Intent的功能
    • 启动Activity(startActivity(Intetn))
    • 启动Service(startService(Intent)/bindService(Intent))
    • 发送广播
  • Intent的类型
    • 显式Intent
    • 隐式Intent

数据传递

实际中Intent中用得最多的就是用来传递数据传递数据

  • 传递大多数java数据类型
    //传数据
    String data = "hello world";
    Intent intent = new Intent(this, xxx.class);
    intent.putExtra("data", data);
    startActivity(intent);
    //接收数据
    Intent intent = getIntent();
    String data = intent.getStringExtra("data");

    //使用Bundle对象 Bundle bundle = new Bundle();bundle.putString("name", "Linda"); bundle.putInt("age", 21); Intent intent = new Intent(this, xxx.class); intent.putExtras(bundle); startActivity(intent); //接收 Bundle bundle = getIntent().getExtras(); String name = bundle.getString("name"); int age = bundle.getInt("age"); 
  • 传递自定义类的对象

实现Serializable或Parcelable接口,一般使用实现Serializable接口即可,因为实现Serializable接口比较简单,而实现Pacelable接口需要重写两个方法。<引用>Intent传递对象的几种方式

回传数据(startActivityForResult(Intent, requestCode))

  Intent intent = new Intent(this, xxx.class);   startActivityForResult(intent, 2); //第二个参数为请求码   @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {         super.onActivityResult(requestCode, resultCode, data);           if(requestCode == 2 && resultCode == 1) {               String data = data.getStringExtra("data"); } }  ------------------------------------------------------------   Intent intent = new Intent();   intent.putExtra("data", "I am xxx.class");   setResult(1, intent); //第一个参数为结果码,一般使用0或1   finish();

获取相册图片返回案例

  private ImageView img;   this.findViewById(R.id.textView).setOnClickListener(new View.OnClickListener() {         @Override public void onClick(View v) {               Intent intent = new Intent(ACTION_PICK);               intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");               startActivityForResult(intent, 2);         }      });      img = (ImageView) this.findViewById(R.id.imageView);   }   @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {           super.onActivityResult(requestCode, resultCode, data);           if (requestCode == 2 && resultCode == RESULT_OK){                if(data != null){                    img.setImageURI(data.getData());                 }            }   } 

显式意图一般只用在应用程序切换组件时使用。而隐式意图的功能要比显示意图更加强大,其不仅可以开启本应用的组件,还可以开启其他应用的组件,如系统照相机、浏览器等。

显式意图:

即通过Intent启动Activity时,需要明确指定激活组件的名称。

//1. 通过上下文和类名.class开启组件 Intent intent = new Intent(this, xxxx.class); startActivity(intent);  //2. 使用包名和全路径名开启组件 Intent intent = new Intent(); intent.setClassName("com.rixin.xxx", "com.rixin.xxx.xxxx"); startActivity(intent);

Activity类中提供了一个startActivity(Intent intent)方法,该方法专门用于开启Activity,它接收一个Intent参数,这里将构建好的Intent传入该方法即可启动目标Activity。

隐式意图:

即没有明确指定组件名的Intent,Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的组件。当不止一个满足时,会弹出对话框提示选择。

//清单文件中                                        //代码中 Intent intent = new Intent(); intent.setAction("com.rixin.xxx");//设置动作和清单文件中一样 startActivity(intent); //隐式意图开启照相机 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivity(intent);

在上述代码中,Intent指定了setAction("com.rixin.xxx"); 这个动作,但没有制定category,这是因为清单文件中配置的 "android.intent.category.DEFAULT"(一般指定为default即可) 是一种默认的category,在调用startActivity()方法时,会自动将这个category添加到Intent中


最近看到一个大神总结的系统常用Intent使用,随即摘录了几个自认为用得到的Intent,<引用>Intent简单用法
如下:

拨打电话

Uri uri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_DIAL, uri); startActivity(intent);

发送短信

Uri uri = Uri.parse("smsto:10086"); Intent intent = new Intent(Intent.ACTION_SMSTO, uri); intent.putExtra("sms_body", "Hello"); startActivity(intent);

打开系统相机,并储存拍下来的照片

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); long time = Calendar.getInstance().getTimeInMillis(); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/picture", time+".jpg"))); startActivity(intent); 

打开浏览器

Uri uri = Uri.parse("http://www.baidu.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);

多媒体播放

Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file://sdcard/music.mp3"); intent.setDataAndType(uri, "audio/mp3"); startActivity(intent); //获取SD卡下所有音频文件,然后播放第一首 Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);

打开录音机

Intent intent = new Intent(Media.RECORD_SOUND_ACTION); startActivity(intent);

进入无线网络设置界面(其他可以举一反三)

Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS); startActivity(intent); 

打开另一个程序

Intent intent = new Intent(); ComponentName cn = new ComponentName("com.rixin.jay.test", "com.rixin.jay.test.MainActivity"); intent.setComponent(cn); intent.setAction(android.intent.action.MAIN); startActivity(intent);

安装Apk

//1. 包名 Uri uri = Uri.fromParts("package", "xxx", null); Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, uri); startActivity(intent);  // apk文件 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.parse("file://" + path), "application/vnd.android.package-archive"); startActivity(intent);

卸载Apk

Uri uri = Uri.fromParts("package", "xxx", null); Intent intent = new Intent(Intent.ACTION_DELETE, uri); startActivity(intent); 

进入联系人界面

Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(People.CONTENT_URI); startActivity(intent);

查看指定联系人

Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, info.id); //联系人id Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);

更多相关文章

  1. android基础重点总结(分层架构,五中布局,activity的生命周期和四种
  2. Android(安卓)结构组件之LiveData
  3. 简述Android六大布局
  4. Android四大组件介绍
  5. Android架构组件(3)LiveData框架
  6. Launcher研究资料收集(4)--Appliction
  7. Android(安卓)获得view的宽和高
  8. android之官方下拉刷新组件SwipeRefreshLayout
  9. Android通用可自定义下拉刷新上拉加载组件PopularRefreshLayout

随机推荐

  1. android线性布局LinerLayout
  2. Android开发秘籍学习笔记(五)
  3. android animation中的参数interpolator
  4. Visual Studio 2010 也能开发Android(安
  5. Android(安卓)Camera 找来找去还是觉得ap
  6. android http连接超时处理
  7. Android下文件操作模式(含SDCard的读写)
  8. Android(安卓)新手常见的10个误区(下)
  9. Android(安卓)Gradle之productFlavors(定
  10. Android(安卓)Notification使用