博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity详解 Intent显式跳转和隐式跳转, 及多个Activity之间传值 总结
阅读量:2212 次
发布时间:2019-05-06

本文共 9606 字,大约阅读时间需要 32 分钟。

 

Activity 生命周期

显式 Intent 调用

1     //创建一个显式的 Intent 对象(方法一:在构造函数中指定) 2      Intent intent = new Intent(Intent_Demo1.this, Intent_Demo1_Result1.class); 3       4      Bundle bundle = new Bundle(); 5      bundle.putString("id", strID); 6      intent.putExtras(bundle); 7       8      intent.putExtra("name", "bbb"); 9      intent.putExtra("userInfo", new UserInfo(1, "name"));10      startActivity(intent);11      12      //创建一个显式的 Intent 对象(方法二:用 setClass 方法)13      Intent intent = new Intent();14      Bundle bundle = new Bundle();15      bundle.putString("id", strID);16      intent.setClass(Intent_Demo1.this, Intent_Demo1_Result1.class);17      intent.putExtras(bundle);18      startActivity(intent);19      20      //创建一个显式的 Intent 对象(方法三:用 setClass 方法)21      Intent intent = new Intent();22      Bundle bundle = new Bundle();23      bundle.putString("id", strID);24      intent.setClassName(Intent_Demo1.this, "com.great.activity_intent.Intent_Demo1_Result1");25      intent.putExtras(bundle);26      startActivity(intent);27      28      //创建一个显式的 Intent 对象(方法四:用 setComponent 方法)29      Intent intent = new Intent();30      Bundle bundle = new Bundle();31      bundle.putString("id", strID);32      //setComponent方法的参数:ComponentName33      intent.setComponent(new ComponentName(Intent_Demo1.this, Intent_Demo1_Result1.class));34      intent.putExtras(bundle);35      startActivity(intent);

Intent隐式跳转 Action

1     //创建一个隐式的 Intent 对象:Action 动作 2     /** 3      * 这里指定的是 AndroidManifest.xml 文件中配置的 4      * 
标签中的
5 * 所在的 Activity,注意这里都要设置
6 */ 7 Intent intent = new Intent(); 8 //设置 Intent 的动作 9 intent.setAction("com.great.activity_intent.Intent_Demo1_Result3");10 Bundle bundle = new Bundle();11 bundle.putString("id", strID);12 intent.putExtras(bundle);13 startActivity(intent);

AndroidManifest.xml

1    
3
4
5
6
7

Category 类别

1 //创建一个隐式的 Intent 对象:Category 类别 2 Intent intent = new Intent(); 3 intent.setAction("com.great.activity_intent.Intent_Demo1_Result33"); 4 /** 5  * 不指定 Category 或 只指定 AndroidManifest.xml 文件中 
标签中配置的任意一个 Category 6 *
除外,就可以访问该 Activity, 7 */ 8 intent.addCategory(Intent.CATEGORY_INFO); 9 intent.addCategory(Intent.CATEGORY_DEFAULT);10 Bundle bundle = new Bundle();11 bundle.putString("id", strID);12 intent.putExtras(bundle);13 startActivity(intent);

AndroidManifest.xml

Date 数据 跳转

1 //创建一个隐式的 Intent 对象,方法四:Date 数据 2 Intent intent = new Intent(); 3 Uri uri = Uri.parse("http://www.great.org:8080/folder/subfolder/etc/abc.pdf"); 4  5 //注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用                 6 //要么单独以 setData 方法设置 URI 7 //intent.setData(uri); 8 //要么单独以 setDataAndType 方法设置 URI 及 mime type 9 intent.setDataAndType(uri, "text/plain");10 //要么单独以 setDataAndType 方法设置 Type11 //intent.setType("text/plain");12 13 /**14  * 不指定 Category 或 只指定 AndroidManifest.xml 文件中 
标签中配置的任意一个 Category15 *
除外,就可以访问该 Activity16 */17 Bundle bundle = new Bundle();18 bundle.putString("id", strID);19 intent.putExtras(bundle);20 startActivity(intent);

AndroidManifest.xml

1         
3
4
5
11
12
13

调用系统的的组件

//web浏览器    Uri uri= Uri.parse("http://www.baidu.com:8080/image/a.jpg");    Intent intent = new Intent(Intent.ACTION_VIEW, uri);    startActivity(intent);        //地图(要在 Android 手机上才能测试)    Uri uri = Uri.parse("geo:38.899533,-77.036476");    Intent intent = new Intent(Intent.ACTION_VIEW, uri);    startActivity(intent);        //路径规划    Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");    Intent it = new Intent(Intent.ACTION_VIEW, uri);    startActivity(it);        //拨打电话-调用拨号程序    Uri uri = Uri.parse("tel:15980665805");    Intent intent = new Intent(Intent.ACTION_DIAL, uri);    startActivity(intent);        //拨打电话-直接拨打电话    //要使用这个必须在配置文件中加入
Uri uri = Uri.parse("tel:15980665805"); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent); //调用发送短信程序(方法一) Uri uri = Uri.parse("smsto:15980665805"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", "The SMS text"); startActivity(intent); //调用发送短信程序(方法二) Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra("sms_body", "The SMS text"); intent.setType("vnd.android-dir/mms-sms"); startActivity(intent); //发送彩信 Uri uri = Uri.parse("content://media/external/images/media/23"); Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra("sms_body", "some text"); intent.putExtra(Intent.EXTRA_STREAM, uri); intent.setType("image/png"); startActivity(intent); //发送Email(方法一)(要在 Android 手机上才能测试) Uri uri = Uri.parse("mailto:zhangsan@gmail.com"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); startActivity(intent); //发送Email(方法二)(要在 Android 手机上才能测试) Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:zhangsan@gmail.com")); intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题"); intent.putExtra(Intent.EXTRA_TEXT, "这是内容"); startActivity(intent); //发送Email(方法三)(要在 Android 手机上才能测试) Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, "me@abc.com"); intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题"); intent.putExtra(Intent.EXTRA_TEXT, "这是内容"); intent.setType("text/plain"); //选择一个邮件客户端 startActivity(Intent.createChooser(intent, "Choose Email Client")); //发送Email(方法四)(要在 Android 手机上才能测试) Intent intent = new Intent(Intent.ACTION_SEND); //收件人 String[] tos = {"to1@abc.com", "to2@abc.com"}; //抄送人 String[] ccs = {"cc1@abc.com", "cc2@abc.com"}; //密送人 String[] bcc = {"bcc1@abc.com", "bcc2@abc.com"}; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_BCC, bcc); intent.putExtra(Intent.EXTRA_SUBJECT, "这是标题"); intent.putExtra(Intent.EXTRA_TEXT, "这是内容"); intent.setType("message/rfc822"); startActivity(Intent.createChooser(intent, "Choose Email Client")); //发送Email且发送附件(要在 Android 手机上才能测试) Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); intent.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mp3/醉红颜.mp3"); intent.setType("audio/mp3"); startActivity(Intent.createChooser(intent, "Choose Email Client")); //播放媒体文件(android 对中文名的文件支持不好) Intent intent = new Intent(Intent.ACTION_VIEW); //Uri uri = Uri.parse("file:///sdcard/zhy.mp3"); Uri uri = Uri.parse("file:///sdcard/a.mp3"); intent.setDataAndType(uri, "audio/mp3"); startActivity(intent); Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); //音乐选择器 //它使用了Intent.ACTION_GET_CONTENT 和 MIME 类型来查找支持 audio/* 的所有 Data Picker,允许用户选择其中之一 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/*"); //Intent.createChooser:应用选择器,这个方法创建一个 ACTION_CHOOSER Intent startActivity(Intent.createChooser(intent, "选择音乐")); Intent intent1 = new Intent(Intent.ACTION_GET_CONTENT); intent1.setType("audio/*"); Intent intent2 = new Intent(Intent.ACTION_CHOOSER); intent2.putExtra(Intent.EXTRA_INTENT, intent1); intent2.putExtra(Intent.EXTRA_TITLE, "aaaa"); startActivity(intent2); // //设置壁纸// Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER); // startActivity(Intent.createChooser(intent, "设置壁纸")); //卸载APK //fromParts方法 //参数1:URI 的 scheme //参数2:包路径 //参数3: Uri uri = Uri.fromParts("package", "com.great.activity_intent", null); Intent intent = new Intent(Intent.ACTION_DELETE, uri); startActivity(intent); //安装APK(???) Uri uri = Uri.fromParts("package", "com.great.activity_intent", null); Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, uri); startActivity(intent); //调用搜索 Intent intent = new Intent(); intent.setAction(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "android"); startActivity(intent);
 
 
多个Activity之间传值   可以通过Bundle对象存储需要传递的数据,例如:
在IntentDemoActivity里面传值,
Intent explicitIntent=new Intent(IntentDemoActivity.this, ExplicitActivity.class);//这是在Intent的构造函数中指定EditText nameText=(EditText)findViewById(R.id.username);// 通过Bundle对象存储需要传递的数据 Bundle bundle=new Bundle(); bundle.putString("userName", nameText.getText().toString());//把Bundle对象bundle给explicitIntentexplicitIntent.putExtras(bundle);startActivity(explicitIntent);
 
在ExplicitActivity获取值:
//获取Intent中的Bundle对象 Bundle bundle = this.getIntent().getExtras();//获取Bundle中的数据,注意类型和keyString userName=bundle.getString("userName");
 
两个个Activity之间切换
 
在ExplicitActivity页面上加一个返回按钮,并在事件写如下代码: /*给上一个Activity返回结果*/ Intent intent=new Intent(ExplicitActivity.this, IntentDemoActivity.class);//这是在Intent的构造函数中指定ExplicitActivity.this.setResult(RESULT_OK,intent);/*结束本Activity*/ExplicitActivity.this.finish(); 这样就返回到IntentDemoActivity这个Activity去了。

转载地址:http://bzqyb.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>
【LEETCODE】125-Valid Palindrome
查看>>
【LEETCODE】28-Implement strStr()
查看>>
【LEETCODE】6-ZigZag Conversion
查看>>
【LEETCODE】8-String to Integer (atoi)
查看>>
【LEETCODE】14-Longest Common Prefix
查看>>
【LEETCODE】38-Count and Say
查看>>
【LEETCODE】278-First Bad Version
查看>>
【LEETCODE】303-Range Sum Query - Immutable
查看>>
【LEETCODE】21-Merge Two Sorted Lists
查看>>
【LEETCODE】231-Power of Two
查看>>
【LEETCODE】172-Factorial Trailing Zeroes
查看>>
【LEETCODE】112-Path Sum
查看>>
【LEETCODE】190-Reverse Bits
查看>>
【LEETCODE】67-Add Binary
查看>>
【LEETCODE】165-Compare Version Numbers
查看>>
【LEETCODE】299-Bulls and Cows
查看>>