小工具知识网

当前位置: 首页 > 行业知识 > Android Studio 之 Intent及其参数传递

行业知识

Android Studio 之 Intent及其参数传递

2026-11-08 02:50:26 来源:互联网转载

一、Intent

  • 显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~
  • 隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框

    1、点击按钮返回Home界面

    Intent it = new Intent();it.setAction(Intent.ACTION_MAIN);it.addCategory(Intent.CATEGORY_HOME);startActivity(it);

    2、点击按钮打开百度页面

    Intent it = new Intent();it.setAction(Intent.ACTION_VIEW);it.setData(Uri.parse("http://www.baidu.com"));startActivity(it);

    二、Intent数据的传递

    通过调用Intent的putExtra()方法存入数据,然后在获得Intent后调用getXxxExtra获得 对应类型的数据;传递多个的话,可以使用Bundle对象作为容器,通过调用Bundle的putXxx先将数据 存储到Bundle中,然后调用Intent的putExtras()方法将Bundle存入Intent中,然后获得Intent以后, 调用getExtras()获得Bundle容器,然后调用其getXXX获取对应的数据! 另外数据存储有点类似于Map的!
    1、Intent传递数组

    写入数组:bd.putStringArray("StringArray", new String[]{"呵呵","哈哈"});

    //可把StringArray换成其他数据类型,比如int,float等等...

    读取数组:String[] str = bd.getStringArray("StringArray")

    2、Intent传递集合

    • a、List

            写入集合:

            intent.putStringArrayListExtra(name, value)

            intent.putIntegerArrayListExtra(name, value)

            读取集合:

            intent.getStringArrayListExtra(name)

            intent.getIntegerArrayListExtra(name)


      • b、List

             将list强转成Serializable类型,然后传入(可用Bundle做媒介)

            写入集合:putExtras(key, (Serializable)list)

            读取集合:(List) getIntent().getSerializable(key)

            Object类需要实现Serializable接口


        • c、Map,或更复杂的

                 解决方法是:外层套个List

          //传递复杂些的参数 Map map1 = new HashMap(); map1.put("key1", "value1");

          map1.put("key2", "value2");

          List list = new ArrayList();

          list.add(map1);

          Intent intent = new Intent();

          intent.setClass(MainActivity.this,ComplexActivity.class);

          Bundle bundle = new Bundle();

          //须定义一个list用于在budnle中传递需要传递的ArrayList,这个是必须要的 ArrayList bundlelist = new ArrayList(); bundlelist.add(list); bundle.putParcelableArrayList("list",bundlelist); intent.putExtras(bundle); startActivity(intent);

          3、Intent传递对象,对象转换为Json字符串

          public class Book{    private int id;    private String title;    //...}public class Author{    private int id;    private String name;    //...}写入数据:Book book=new Book();book.setTitle("Java编程思想");Author author=new Author();author.setId(1);author.setName("Bruce Eckel");book.setAuthor(author);Intent intent=new Intent(this,SecondActivity.class);intent.putExtra("book",new Gson().toJson(book));//Gson解析startActivity(intent);读取数据:String bookJson=getIntent().getStringExtra("book");Book book=new Gson().fromJson(bookJson,Book.class);Gson解析Log.d(TAG,"book title->"+book.getTitle());Log.d(TAG,"book author name->"+book.getAuthor().getName());

          4、Intent传递Bitmap

          Bitmap bitmap = null;Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putParcelable("bitmap", bitmap);//bitmap默认实现Parcelable接口,直接传递即可intent.putExtra("bundle", bundle);

          5、使用 Application全局对象,数据可以在任何地方都能获取到

          Android系统在每个程序运行的时候创建一个Application对象,而且只会创建一个

          •   在AndroidManifest.xml中为我们的application标签添加:name属性

             

            name=".MyApp"  android:icon="@drawable/icon"  android:label="@string/app_name">
          •  自定义Application类
            class MyApp extends Application {    private String myState;    private static MyApp instance;        public static MyApp getInstance(){        return instance;    }     public String getState(){        return myState;    }    public void setState(String s){        myState = s;    }        @Override    public void onCreate(){        onCreate();        instance = this;    }}我们就可以在任意地方直接调用:MyApp.getInstance()来获得Application的全局对象

            其他常用系统Intent合集

            //===============================================================

            //1.拨打电话

            // 给移动客服10086拨打电话

            Uri uri = Uri.parse("tel:10086");

            Intent intent = new Intent(Intent.ACTION_DIAL, uri);

            startActivity(intent);

            //===============================================================

            //2.发送短信

            // 给10086发送内容为“Hello”的短信

            Uri uri = Uri.parse("smsto:10086");

            Intent intent = new Intent(Intent.ACTION_SENDTO, uri);

            intent.putExtra("sms_body", "Hello");

            startActivity(intent);

            //3.发送彩信(相当于发送带附件的短信)

            Intent intent = new Intent(Intent.ACTION_SEND);

            intent.putExtra("sms_body", "Hello");

            Uri uri = Uri.parse("content://media/external/images/media/23");

            intent.putExtra(Intent.EXTRA_STREAM, uri);

            intent.setType("image/png");

            startActivity(intent);

            //===============================================================

            //4.打开浏览器:

            // 打开百度主页

            Uri uri = Uri.parse("http://www.baidu.com");

            Intent intent  = new Intent(Intent.ACTION_VIEW, uri);

            startActivity(intent);

            //===============================================================

            //5.发送电子邮件:(阉割了Google服务的没戏!!!!)

            // 给someone@domain.com发邮件

            Uri uri = Uri.parse("mailto:someone@domain.com");

            Intent intent = new Intent(Intent.ACTION_SENDTO, uri);

            startActivity(intent);

            // 给someone@domain.com发邮件发送内容为“Hello”的邮件

            Intent intent = new Intent(Intent.ACTION_SEND);

            intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");

            intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");

            intent.putExtra(Intent.EXTRA_TEXT, "Hello");

            intent.setType("text/plain");

            startActivity(intent);

            // 给多人发邮件

            Intent intent=new Intent(Intent.ACTION_SEND);

            String[] tos = {"1@abc.com", "2@abc.com"}; // 收件人

            String[] ccs = {"3@abc.com", "4@abc.com"}; // 抄送

            String[] bccs = {"5@abc.com", "6@abc.com"}; // 密送

            intent.putExtra(Intent.EXTRA_EMAIL, tos);

            intent.putExtra(Intent.EXTRA_CC, ccs);

            intent.putExtra(Intent.EXTRA_BCC, bccs);

            intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");

            intent.putExtra(Intent.EXTRA_TEXT, "Hello");

            intent.setType("message/rfc822");

            startActivity(intent);

            //===============================================================

            //6.显示地图:

            // 打开Google地图中国北京位置(北纬39.9,东经116.3)

            Uri uri = Uri.parse("geo:39.9,116.3");

            Intent intent = new Intent(Intent.ACTION_VIEW, uri);

            startActivity(intent);

            //===============================================================

            //7.路径规划

            // 路径规划:从北京某地(北纬39.9,东经116.3)到上海某地(北纬31.2,东经121.4)

            Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");

            Intent intent = new Intent(Intent.ACTION_VIEW, uri);

            startActivity(intent);

            //===============================================================

            //8.多媒体播放:

            Intent intent = new Intent(Intent.ACTION_VIEW);

            Uri uri = Uri.parse("file:///sdcard/foo.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);

            //===============================================================

            //9.打开摄像头拍照:

            // 打开拍照程序

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

            startActivityForResult(intent, 0);

            // 取出照片数据

            Bundle extras = intent.getExtras(); 

            Bitmap bitmap = (Bitmap) extras.get("data");

            //另一种:

            //调用系统相机应用程序,并存储拍下来的照片

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

            time = Calendar.getInstance().getTimeInMillis();

            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment

            .getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));

            startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);

            //===============================================================

            //10.获取并剪切图片

            // 获取并剪切图片

            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

            intent.setType("image/*");

            intent.putExtra("crop", "true"); // 开启剪切

            intent.putExtra("aspectX", 1); // 剪切的宽高比为1:2

            intent.putExtra("aspectY", 2);

            intent.putExtra("outputX", 20); // 保存图片的宽和高

            intent.putExtra("outputY", 40); 

            intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路径

            intent.putExtra("outputFormat", "JPEG");// 返回格式

            startActivityForResult(intent, 0);

            // 剪切特定图片

            Intent intent = new Intent("com.android.camera.action.CROP"); 

            intent.setClassName("com.android.camera", "com.android.camera.CropImage"); 

            intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp"))); 

            intent.putExtra("outputX", 1); // 剪切的宽高比为1:2

            intent.putExtra("outputY", 2);

            intent.putExtra("aspectX", 20); // 保存图片的宽和高

            intent.putExtra("aspectY", 40);

            intent.putExtra("scale", true);

            intent.putExtra("noFaceDetection", true); 

            intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp")); 

            startActivityForResult(intent, 0);

            //===============================================================

            //11.打开Google Market 

            // 打开Google Market直接进入该程序的详细页面

            Uri uri = Uri.parse("market://details?com.demo.app");

            Intent intent = new Intent(Intent.ACTION_VIEW, uri);

            startActivity(intent);

            //===============================================================

            //12.进入手机设置界面:

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

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

            startActivityForResult(intent, 0);

            //===============================================================

            //13.安装apk:

            Uri installUri = Uri.fromParts("package", "xxx", null);   

            returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

            //===============================================================

            //14.卸载apk:

            Uri uri = Uri.fromParts("package", strPackageName, null);      

            Intent it = new Intent(Intent.ACTION_DELETE, uri);      

            startActivity(it); 

            //===============================================================

            //15.发送附件:

            Intent it = new Intent(Intent.ACTION_SEND);      

            it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");      

            it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");      

            sendIntent.setType("audio/mp3");      

            startActivity(Intent.createChooser(it, "Choose Email Client"));

            //===============================================================

            //16.进入联系人页面:

            Intent intent = new Intent();

            intent.setAction(Intent.ACTION_VIEW);

            intent.setData(People.CONTENT_URI);

            startActivity(intent);

            //===============================================================

            //17.查看指定联系人:

            Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id联系人ID

            Intent intent = new Intent();

            intent.setAction(Intent.ACTION_VIEW);

            intent.setData(personUri);

            startActivity(intent);

            //===============================================================

            //18.调用系统编辑添加联系人(高版本SDK有效):

            Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT);    

            it.setType("vnd.android.cursor.item/contact");    

            //it.setType(Contacts.CONTENT_ITEM_TYPE);    

            it.putExtra("name","myName");    

            it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY, "organization");    

            it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email");    

            it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");    

            it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,"mobilePhone");    

            it.putExtra( android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,"workPhone");    

            it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");    

            startActivity(it);

            //===============================================================

            //19.调用系统编辑添加联系人(全有效):

            Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);    

            intent.setType(People.CONTENT_ITEM_TYPE);    

            intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");    

            intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");    

            intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);    

            intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com");    

            intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE, Contacts.ContactMethodsColumns.TYPE_WORK);    

            startActivity(intent);

            //===============================================================

            //20.打开另一程序 

            Intent i = new Intent();     

            ComponentName cn = new ComponentName("com.example.jay.test",     

            "com.example.jay.test.MainActivity");     

            i.setComponent(cn);     

            i.setAction("android.intent.action.MAIN");     

            startActivityForResult(i, RESULT_OK);

            //===============================================================

            //21.打开录音机

            Intent mi = new Intent(Media.RECORD_SOUND_ACTION);     

            startActivity(mi);

            //===============================================================

            //22.从google搜索内容 

            Intent intent = new Intent();     

            intent.setAction(Intent.ACTION_WEB_SEARCH);     

            intent.putExtra(SearchManager.QUERY,"searchString")     

            startActivity(intent);

            //===============================================================

             

上一篇:揭秘电商巨头京东背后的技术,PHP解析京东商城源码实战解析!

下一篇:怎么搭建站群服务器链接?