Android Intent 缺乏、安全感 2022-07-25 15:35 145阅读 0赞 因为刚做完天气预报下一个项目还没有开始 组长还没有分配我应该写的部分 所以我就开始不知道干啥呢 刚好有个大三的学姐过来问我这几天有没有在学习 顺便给我指点一下 结果学姐问的问题都很基础都是安卓最基础的知识点 我经常忽略 做东西的时候总是要实现什么才去看什么 所以其实底子很虚 所以决定利用这段时间慢慢看一些基础知识 今天中午看了 一本书还在网上搜到了很多资料 觉得里面写的intent用法很不错 以前我只知道intent可以跳转 可以传数据 现在发现还有很多东西可以实现 所以记录一下 \*intent可以作为四大组件的桥梁( 这里再记一下四大组件分别是 Activity 、Service、BroadcastReceiver、ContentProvider。 记记记记记记)\* 他是各个组件进行交互的一种重要方式 intent的用法大致可以分为两种显式intent 和隐式intent 首先我们来看一下***显式intent 的用法*** Intent 有多个构造函数的重载,其中一个是Intent()这个构造函数有两个参数 第一个就是你当前的活动 第二个是你需要启动的目标活动 当然 你的第二个活动必须先注册 啦啦啦 当我们把Intent构造好之后 就可以通过startActivity() 这个方法 将构建好的intent传入这个方法就可以启动目标活动了 说了这么多 来吃下这颗栗子《\* 。\*》 Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); 这种方式来启动的活动我们称之为显式intent 因为意图非常明显嘛 ***下来还有隐式intent*** 他则没有明确的指出我们想要启动哪一个活动 而是有一个字符串的东西指定了 action 和category关于category 文末有我搜集的常见的好多个!!需要时可以查阅 比如我们在androidmaniifest文件中对一个 目标activity这样注册 这个活动就自己可以响应很多操作 <activity android:name = ".SecondActivity"> <intent_filter> <action android:name = "com.example.activitytest.ACTION_START"/> <category android: name = "android.intent.category.DEFAULT"/> </intent_filter> </activity> 我们当前的Activity 中的点击事件则如下面代码 button.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent intent=new Intent("com.example.activitytest.ACTION_START"); startActivity(intent); } } ) 当我们点击button的时候 就可以启动目标activity了 注意:每个intent中只能指定一个action 却能指定多个category 下面是一个当前程序可以响应网页的部分 <activity android:name = ".ThirdActivity"> <intent_filter> <action android:name = "android.intent.action.VIEW"/> <category android: name = "android.intent.category.DEFAULT"/> <date android:scheme = "http"/> </intent_filter> </activity> 我们设置了action是常量值 category指向了默认的值 data标签中我们指定了数据协议必须是http 这个activity就和浏览器一样可以响应网页的操作了 当然也可以通过intent 来实现 ***intent可以向下一个活动传递数据*** 用一个简单的栗子来展示一下传递过程 Intent intent = new Intent(); // Activity1 intent.putExtra("one", num1); intent.putExtra("two", num2); intent.setClass(FirstActivity.this, SecondActivity.class); startActivity(intent); Intent intent = getIntent(); //Activity2 String num1 = intent.getStringExtra("one"); String num2 = intent.getStringExtra("two"); int ret = Integer.parseInt(num1) + Integer.parseInt(num2); result.setText(ret+""); 当然也可以返回数据给上一个活动 需要在启动activity的时候用这样的方法 startActivityForResult(); 但是我还没有用过啦啦啦 下面是我在晚上觉得有一个前辈整理的特别好的地方 所以拿过来留下 以后可以用到 显示网页:Uri uri = Uri.parse("http://www.google.com"); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(it); 显示地图: Uri uri = Uri.parse("geo:38.899533,-77.036476"); Intent it = new Intent(Intent.Action_VIEW,uri); startActivity(it); 路径规划: 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:xxxxxx"); Intent it = new Intent(Intent.ACTION_DIAL, uri); startActivity(it); Uri uri = Uri.parse("tel.xxxxxx"); Intent it =new Intent(Intent.ACTION_CALL,uri); 要使用这个必须在配置文件中加入<uses-permission id="android.permission.CALL_PHONE" /> 发送SMS/MMS 调用发送短信的程序 Intent it = new Intent(Intent.ACTION_VIEW); it.putExtra("sms_body", "The SMS text"); it.setType("vnd.android-dir/mms-sms"); startActivity(it); 发送短信 Uri uri = Uri.parse("smsto:0800000123"); Intent it = new Intent(Intent.ACTION_SENDTO, uri); it.putExtra("sms_body", "The SMS text"); startActivity(it); 发送彩信 Uri uri = Uri.parse("content://media/external/images/media/23"); Intent it = new Intent(Intent.ACTION_SEND); it.putExtra("sms_body", "some text"); it.putExtra(Intent.EXTRA_STREAM, uri); it.setType("image/png"); startActivity(it); 发送Email Uri uri = Uri.parse("mailto:xxx@abc.com"); Intent it = new Intent(Intent.ACTION_SENDTO, uri); startActivity(it); Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com"); it.putExtra(Intent.EXTRA_TEXT, "The email body text"); it.setType("text/plain"); startActivity(Intent.createChooser(it, "Choose Email Client")); Intent it=new Intent(Intent.ACTION_SEND); String[] tos={ "me@abc.com"}; String[] ccs={ "you@abc.com"}; it.putExtra(Intent.EXTRA_EMAIL, tos); it.putExtra(Intent.EXTRA_CC, ccs); it.putExtra(Intent.EXTRA_TEXT, "The email body text"); it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); it.setType("message/rfc822"); startActivity(Intent.createChooser(it, "Choose Email Client")); 添加附件 Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3"); sendIntent.setType("audio/mp3"); startActivity(Intent.createChooser(it, "Choose Email Client")); 播放多媒体 Intent it = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file:///sdcard/song.mp3"); it.setDataAndType(uri, "audio/mp3"); startActivity(it); Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); Uninstall 程序 Uri uri = Uri.fromParts("package", strPackageName, null); Intent it = new Intent(Intent.ACTION_DELETE, uri); startActivity(it); Install 程序 Uri installUri = Uri.fromParts("package", "xxx", null); returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); //搜索应用 Uri uri = Uri.parse("market://search?q=pname:pkg_name"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); //where pkg_name is the full package path for an application //显示指定应用的详细页面(这个好像不支持了,找不到app_id) Uri uri = Uri.parse("market://details?id=app_id"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); //where app_id is the application ID, find the ID //by clicking on your application on Market home //page, and notice the ID from the address bar 打开另一程序 Intent i = new Intent(); ComponentName cn = new ComponentName("com.drip.android2", "com.drip.android2.AndroidSearch"); i.setComponent(cn); i.setAction("android.intent.action.MAIN"); startActivityForResult(i, RESULT_OK); 打开联系人列表 <1> Intent i = new Intent(); i.setAction(Intent.ACTION_GET_CONTENT); i.setType("vnd.android.cursor.item/phone"); startActivityForResult(i, REQUEST_TEXT); <2> Uri uri = Uri.parse("content://contacts/people"); Intent it = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(it, REQUEST_TEXT); 打开录音机 Intent mi = new Intent(Media.RECORD_SOUND_ACTION); startActivity(mi); 从gallery选取图片 Inten t i = new Intent(); i.setType("image/*"); i.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(i, 11); 打开照相机 <1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null); this.sendBroadcast(i); <2>long dateTaken = System.currentTimeMillis(); String name = createName(dateTaken) + ".jpg"; fileName = folder + name; ContentValues values = new ContentValues(); values.put(Images.Media.TITLE, fileName); values.put("_data", fileName); values.put(Images.Media.PICASA_ID, fileName); values.put(Images.Media.DISPLAY_NAME, fileName); values.put(Images.Media.DESCRIPTION, fileName); values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName); Uri photoUri = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(inttPhoto, 10); 播放多媒体 Intent it = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file:///sdcard/song.mp3"); it.setDataAndType(uri, "audio/mp3"); startActivity(it); 或者 Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it); 或者 Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3"); returnIt = new Intent(Intent.ACTION_VIEW, playUri); 发送Email Uri uri = Uri.parse("mailto:xxx@abc.com"); Intent it = new Intent(Intent.ACTION_SENDTO, uri); startActivity(it); 或者: Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, address); intent.putExtra(Intent.EXTRA_SUBJECT, filename); intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + filename)); ; intent.setType("text/csv"); startActivity(Intent.createChooser(intent, "EMail File")); 或者: Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com"); it.putExtra(Intent.EXTRA_TEXT, "The email body text"); it.setType("text/plain"); startActivity(Intent.createChooser(it, "Choose Email Client")); 或者: Intent it=new Intent(Intent.ACTION_SEND); String[] tos={ "me@abc.com"}; String[] ccs={ "you@abc.com"}; it.putExtra(Intent.EXTRA_EMAIL, tos); it.putExtra(Intent.EXTRA_CC, ccs); it.putExtra(Intent.EXTRA_TEXT, "The email body text"); it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); it.setType("message/rfc822"); startActivity(Intent.createChooser(it, "Choose Email Client")); 或者: Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3"); sendIntent.setType("audio/mp3"); startActivity(Intent.createChooser(it, "Choose Email Client")); 后台发送短信 注册权限 <uses-permission android:name="android.permission.SEND_SMS" /> 代码实现 : // 获取信息内容 String message ; // 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。 if (message != null) { SmsManager sms = SmsManager.getDefault(); // 如果短信没有超过限制长度,则返回一个长度的List。 List<String> texts = sms.divideMessage(message); for (String text : texts) { sms.sendTextMessage(“这里是接收者电话号码”, “这里是发送者电话号码”, “这里是短信内容”, null, null); } } //说明 sms.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent): destinationAddress:接收方的手机号码 scAddress:发送方的手机号码 text:信息内容 sentIntent:发送是否成功的回执, DeliveryIntent:接收是否成功的回执, 从google搜索内容 Intent intent = new Intent(); intent.setAction(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY,"searchString") startActivity(intent); [java] view plain copy APK 安装 Intent intent =new Intenet(); 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 联合测试使用
还没有评论,来说两句吧...