Android Intent

缺乏、安全感 2022-07-25 15:35 325阅读 0赞

因为刚做完天气预报下一个项目还没有开始 组长还没有分配我应该写的部分 所以我就开始不知道干啥呢 刚好有个大三的学姐过来问我这几天有没有在学习 顺便给我指点一下 结果学姐问的问题都很基础都是安卓最基础的知识点 我经常忽略 做东西的时候总是要实现什么才去看什么 所以其实底子很虚 所以决定利用这段时间慢慢看一些基础知识 今天中午看了 一本书还在网上搜到了很多资料 觉得里面写的intent用法很不错 以前我只知道intent可以跳转 可以传数据 现在发现还有很多东西可以实现 所以记录一下

*intent可以作为四大组件的桥梁( 这里再记一下四大组件分别是
Activity 、Service、BroadcastReceiver、ContentProvider。
记记记记记记)*
他是各个组件进行交互的一种重要方式 intent的用法大致可以分为两种显式intent 和隐式intent 首先我们来看一下显式intent 的用法 Intent 有多个构造函数的重载,其中一个是Intent()这个构造函数有两个参数 第一个就是你当前的活动 第二个是你需要启动的目标活动 当然 你的第二个活动必须先注册 啦啦啦 当我们把Intent构造好之后 就可以通过startActivity() 这个方法 将构建好的intent传入这个方法就可以启动目标活动了
说了这么多 来吃下这颗栗子《* 。*》

  1. Intent intent=new Intent(MainActivity.this,SecondActivity.class);
  2. startActivity(intent);

这种方式来启动的活动我们称之为显式intent 因为意图非常明显嘛
下来还有隐式intent
他则没有明确的指出我们想要启动哪一个活动 而是有一个字符串的东西指定了 action 和category关于category 文末有我搜集的常见的好多个!!需要时可以查阅 比如我们在androidmaniifest文件中对一个 目标activity这样注册

这个活动就自己可以响应很多操作

  1. <activity android:name = ".SecondActivity">
  2. <intent_filter>
  3. <action android:name = "com.example.activitytest.ACTION_START"/>
  4. <category android: name = "android.intent.category.DEFAULT"/>
  5. </intent_filter>
  6. </activity>

我们当前的Activity 中的点击事件则如下面代码

  1. button.setOnClickListener(new OnClickListener(){
  2. public void onClick(View v){
  3. Intent intent=new Intent("com.example.activitytest.ACTION_START");
  4. startActivity(intent);
  5. }
  6. }
  7. )

当我们点击button的时候 就可以启动目标activity了

注意:每个intent中只能指定一个action 却能指定多个category

下面是一个当前程序可以响应网页的部分

  1. <activity android:name = ".ThirdActivity">
  2. <intent_filter>
  3. <action android:name = "android.intent.action.VIEW"/>
  4. <category android: name = "android.intent.category.DEFAULT"/>
  5. <date android:scheme = "http"/>
  6. </intent_filter>
  7. </activity>

我们设置了action是常量值 category指向了默认的值 data标签中我们指定了数据协议必须是http 这个activity就和浏览器一样可以响应网页的操作了 当然也可以通过intent 来实现

intent可以向下一个活动传递数据
用一个简单的栗子来展示一下传递过程

  1. Intent intent = new Intent(); // Activity1
  2. intent.putExtra("one", num1);
  3. intent.putExtra("two", num2);
  4. intent.setClass(FirstActivity.this, SecondActivity.class);
  5. startActivity(intent);
  6. Intent intent = getIntent(); //Activity2
  7. String num1 = intent.getStringExtra("one");
  8. String num2 = intent.getStringExtra("two");
  9. int ret = Integer.parseInt(num1) + Integer.parseInt(num2);
  10. result.setText(ret+"");

当然也可以返回数据给上一个活动
需要在启动activity的时候用这样的方法
startActivityForResult();
但是我还没有用过啦啦啦

下面是我在晚上觉得有一个前辈整理的特别好的地方
所以拿过来留下 以后可以用到

  1. 显示网页:Uri uri = Uri.parse("http://www.google.com");
  2. Intent it = new Intent(Intent.ACTION_VIEW,uri);
  3. startActivity(it);
  4. 显示地图:
  5. Uri uri = Uri.parse("geo:38.899533,-77.036476");
  6. Intent it = new Intent(Intent.Action_VIEW,uri);
  7. startActivity(it);
  8. 路径规划:
  9. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
  10. Intent it = new Intent(Intent.ACTION_VIEW,URI);
  11. startActivity(it);
  12. 拨打电话:
  13. 调用拨号程序
  14. Uri uri = Uri.parse("tel:xxxxxx");
  15. Intent it = new Intent(Intent.ACTION_DIAL, uri);
  16. startActivity(it);
  17. Uri uri = Uri.parse("tel.xxxxxx");
  18. Intent it =new Intent(Intent.ACTION_CALL,uri);
  19. 要使用这个必须在配置文件中加入<uses-permission id="android.permission.CALL_PHONE" />
  20. 发送SMS/MMS
  21. 调用发送短信的程序
  22. Intent it = new Intent(Intent.ACTION_VIEW);
  23. it.putExtra("sms_body", "The SMS text");
  24. it.setType("vnd.android-dir/mms-sms");
  25. startActivity(it);
  26. 发送短信
  27. Uri uri = Uri.parse("smsto:0800000123");
  28. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
  29. it.putExtra("sms_body", "The SMS text");
  30. startActivity(it);
  31. 发送彩信
  32. Uri uri = Uri.parse("content://media/external/images/media/23");
  33. Intent it = new Intent(Intent.ACTION_SEND);
  34. it.putExtra("sms_body", "some text");
  35. it.putExtra(Intent.EXTRA_STREAM, uri);
  36. it.setType("image/png");
  37. startActivity(it);
  38. 发送Email
  39. Uri uri = Uri.parse("mailto:xxx@abc.com");
  40. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
  41. startActivity(it);
  42. Intent it = new Intent(Intent.ACTION_SEND);
  43. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
  44. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
  45. it.setType("text/plain");
  46. startActivity(Intent.createChooser(it, "Choose Email Client"));
  47. Intent it=new Intent(Intent.ACTION_SEND);
  48. String[] tos={
  49. "me@abc.com"};
  50. String[] ccs={
  51. "you@abc.com"};
  52. it.putExtra(Intent.EXTRA_EMAIL, tos);
  53. it.putExtra(Intent.EXTRA_CC, ccs);
  54. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
  55. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
  56. it.setType("message/rfc822");
  57. startActivity(Intent.createChooser(it, "Choose Email Client"));
  58. 添加附件
  59. Intent it = new Intent(Intent.ACTION_SEND);
  60. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
  61. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
  62. sendIntent.setType("audio/mp3");
  63. startActivity(Intent.createChooser(it, "Choose Email Client"));
  64. 播放多媒体
  65. Intent it = new Intent(Intent.ACTION_VIEW);
  66. Uri uri = Uri.parse("file:///sdcard/song.mp3");
  67. it.setDataAndType(uri, "audio/mp3");
  68. startActivity(it);
  69. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
  70. Intent it = new Intent(Intent.ACTION_VIEW, uri);
  71. startActivity(it);
  72. Uninstall 程序
  73. Uri uri = Uri.fromParts("package", strPackageName, null);
  74. Intent it = new Intent(Intent.ACTION_DELETE, uri);
  75. startActivity(it);
  76. Install 程序
  77. Uri installUri = Uri.fromParts("package", "xxx", null);
  78. returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
  79. //搜索应用
  80. Uri uri = Uri.parse("market://search?q=pname:pkg_name");
  81. Intent it = new Intent(Intent.ACTION_VIEW, uri);
  82. startActivity(it);
  83. //where pkg_name is the full package path for an application
  84. //显示指定应用的详细页面(这个好像不支持了,找不到app_id)
  85. Uri uri = Uri.parse("market://details?id=app_id");
  86. Intent it = new Intent(Intent.ACTION_VIEW, uri);
  87. startActivity(it);
  88. //where app_id is the application ID, find the ID
  89. //by clicking on your application on Market home
  90. //page, and notice the ID from the address bar
  91. 打开另一程序
  92. Intent i = new Intent();
  93. ComponentName cn = new ComponentName("com.drip.android2",
  94. "com.drip.android2.AndroidSearch");
  95. i.setComponent(cn);
  96. i.setAction("android.intent.action.MAIN");
  97. startActivityForResult(i, RESULT_OK);
  98. 打开联系人列表
  99. <1>
  100. Intent i = new Intent();
  101. i.setAction(Intent.ACTION_GET_CONTENT);
  102. i.setType("vnd.android.cursor.item/phone");
  103. startActivityForResult(i, REQUEST_TEXT);
  104. <2>
  105. Uri uri = Uri.parse("content://contacts/people");
  106. Intent it = new Intent(Intent.ACTION_PICK, uri);
  107. startActivityForResult(it, REQUEST_TEXT);
  108. 打开录音机
  109. Intent mi = new Intent(Media.RECORD_SOUND_ACTION);
  110. startActivity(mi);
  111. gallery选取图片
  112. Inten t i = new Intent();
  113. i.setType("image/*");
  114. i.setAction(Intent.ACTION_GET_CONTENT);
  115. startActivityForResult(i, 11);
  116. 打开照相机
  117. <1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
  118. this.sendBroadcast(i);
  119. <2>long dateTaken = System.currentTimeMillis();
  120. String name = createName(dateTaken) + ".jpg";
  121. fileName = folder + name;
  122. ContentValues values = new ContentValues();
  123. values.put(Images.Media.TITLE, fileName);
  124. values.put("_data", fileName);
  125. values.put(Images.Media.PICASA_ID, fileName);
  126. values.put(Images.Media.DISPLAY_NAME, fileName);
  127. values.put(Images.Media.DESCRIPTION, fileName);
  128. values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);
  129. Uri photoUri = getContentResolver().insert(
  130. MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
  131. Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  132. inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
  133. startActivityForResult(inttPhoto, 10);
  134. 播放多媒体
  135. Intent it = new Intent(Intent.ACTION_VIEW);
  136. Uri uri = Uri.parse("file:///sdcard/song.mp3");
  137. it.setDataAndType(uri, "audio/mp3");
  138. startActivity(it);
  139. 或者
  140. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
  141. Intent it = new Intent(Intent.ACTION_VIEW, uri);
  142. startActivity(it);
  143. 或者
  144. Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
  145. returnIt = new Intent(Intent.ACTION_VIEW, playUri);
  146. 发送Email
  147. Uri uri = Uri.parse("mailto:xxx@abc.com");
  148. Intent it = new Intent(Intent.ACTION_SENDTO, uri);
  149. startActivity(it);
  150. 或者:
  151. Intent intent = new Intent(Intent.ACTION_SEND);
  152. intent.putExtra(Intent.EXTRA_EMAIL, address);
  153. intent.putExtra(Intent.EXTRA_SUBJECT, filename);
  154. intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + filename)); ;
  155. intent.setType("text/csv");
  156. startActivity(Intent.createChooser(intent, "EMail File"));
  157. 或者:
  158. Intent it = new Intent(Intent.ACTION_SEND);
  159. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
  160. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
  161. it.setType("text/plain");
  162. startActivity(Intent.createChooser(it, "Choose Email Client"));
  163. 或者:
  164. Intent it=new Intent(Intent.ACTION_SEND);
  165. String[] tos={
  166. "me@abc.com"};
  167. String[] ccs={
  168. "you@abc.com"};
  169. it.putExtra(Intent.EXTRA_EMAIL, tos);
  170. it.putExtra(Intent.EXTRA_CC, ccs);
  171. it.putExtra(Intent.EXTRA_TEXT, "The email body text");
  172. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
  173. it.setType("message/rfc822");
  174. startActivity(Intent.createChooser(it, "Choose Email Client"));
  175. 或者:
  176. Intent it = new Intent(Intent.ACTION_SEND);
  177. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
  178. it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
  179. sendIntent.setType("audio/mp3");
  180. startActivity(Intent.createChooser(it, "Choose Email Client"));
  181. 后台发送短信
  182. 注册权限
  183. <uses-permission android:name="android.permission.SEND_SMS" />
  184. 代码实现 :
  185. // 获取信息内容
  186. String message ;
  187. // 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。
  188. if (message != null) {
  189. SmsManager sms = SmsManager.getDefault();
  190. // 如果短信没有超过限制长度,则返回一个长度的List。
  191. List<String> texts = sms.divideMessage(message);
  192. for (String text : texts) {
  193. sms.sendTextMessage(“这里是接收者电话号码”, “这里是发送者电话号码”, “这里是短信内容”, null, null);
  194. }
  195. }
  196. //说明
  197. sms.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent):
  198. destinationAddress:接收方的手机号码
  199. scAddress:发送方的手机号码
  200. text:信息内容
  201. sentIntent:发送是否成功的回执,
  202. DeliveryIntent:接收是否成功的回执,
  203. google搜索内容
  204. Intent intent = new Intent();
  205. intent.setAction(Intent.ACTION_WEB_SEARCH);
  206. intent.putExtra(SearchManager.QUERY,"searchString")
  207. startActivity(intent);
  208. [java] view plain copy
  209. APK 安装
  210. Intent intent =new Intenet();
  211. String filepath="/SDCard/XXX.apk";

category的作用:提供将要执行的action的额外信息,一般在隐式地启动activity时需要用到。常见的category如下:

[html] view plaincopyprint?
CATEGORY_ALTERNATIVE
设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的action

CATEGORY_APP_BROWSER
和ACTION_MAIN一起使用,用来启动浏览器应用程序

CATEGORY_APP_CALCULATOR
和ACTION_MAIN一起使用,用来启动计算器应用程序

CATEGORY_APP_CALENDAR
和ACTION_MAIN一起使用,用来启动日历应用程序

CATEGORY_APP_CONTACTS
和ACTION_MAIN一起使用,用来启动联系人应用程序

CATEGORY_APP_EMAIL
和ACTION_MAIN一起使用,用来启动邮件应用程序

CATEGORY_APP_GALLERY
和ACTION_MAIN一起使用,用来启动图库应用程序

CATEGORY_APP_MAPS
和ACTION_MAIN一起使用,用来启动地图应用程序

CATEGORY_APP_MARKET
这个activity允许用户浏览和下载新的应用程序

CATEGORY_APP_MESSAGING
和ACTION_MAIN一起使用,用来启动短信应用程序

CATEGORY_APP_MUSIC
和ACTION_MAIN一起使用,用来启动音乐应用程序

CATEGORY_BROWSABLE
能够被浏览器安全调用的activity必须支持这个category

CATEGORY_DEFAULT
设置这个activity对于默认的action是否是一个可选的

CATEGORY_EMBED
可以运行在父activity容器内

CATEGORY_HOME
主activity,当应用程序启动时,它是第一个显示的activity

CATEGORY_LAUNCHER
应该在上层的启动列表里显示

CATEGORY_MONKEY
这个activity可能被monkey或者其他的自动测试工具执行

CATEGORY_OPENABLE
用来指示一个GET_CONTENT意图只希望ContentResolver.openInputStream能够打开URI

CATEGORY_PREFERENCE
这个activity是一个选项卡

CATEGORY_SAMPLE_CODE
作为一个简单的代码示例使用(一般情况下不使用)

CATEGORY_SELECTED_ALTERNATIVE
设置这个activity是否可以被认为是用户当前选择的数据的一个可选择的action

CATEGORY_TAB
想要在已有的TabActivity内部作为一个Tab使用

CATEGORY_TEST
供测试使用(一般情况不使用)

CATEGORY_UNIT_TEST
联合测试使用

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Android—————Intent

    一、什么是Intent > Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将

    相关 Android Intent基础

    Intent 是 Android 一个常用的用于组件间互相通信的信息对象,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间进行数据传递。 基本用例主要包括以下三个:

    相关 Android Intent详解

    一、 Intent 作用       Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。

    相关 Android Intent

    因为刚做完天气预报下一个项目还没有开始 组长还没有分配我应该写的部分 所以我就开始不知道干啥呢 刚好有个大三的学姐过来问我这几天有没有在学习 顺便给我指点一下 结果学姐问的问题

    相关 Android intent

    1、新建一个Intent 对象,用于跳转。 2、调用Intent对象的setClass()方法,实现界面跳转。 3、创建个Timer对象,注意:java.util中的。

    相关 Android.Intent.Action

    Intent.Action的作用 在讲action之前,我跟大家回忆一个场景。用过Android手机的人应该都知道,比如说我在某个App例如新浪微博中点击拍照,会跳转到照

    相关 Android 了解intent

    Android 了解完activity的基本知识,接下来了解Android intent(据说是多个activity之间的媒介)。 学习的过程自然少不了参照,我选择的参照是郭