Intent的详细解析以及用法

     Android的四大组件分别为Activity 、Service、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者),这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用,Intent的中文意思为“意图”,在Android中可以理解为想要做什么,实现activity之间的跳转。
Intent在Android中常见的使用:

显示网页:

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); 


要使用这个必须在配置文件中加入 


发送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"));

 后台发送短信
注册权限

代码实现 :

// 获取信息内容String message ;// 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。if (message != null) {SmsManager sms = SmsManager.getDefault();// 如果短信没有超过限制长度,则返回一个长度的List。List 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);  


APK 安装
 

Intent intent =new Intenet();String filepath="/SDCard/XXX.apk";intent.setDataAndType(Uri.parse("file://" + filepath),"application/vnd.android.package-archive");starActivity(intent);//activity之间的跳转Intent intent=new Intent();intent.setClass(MainActivity.this, SecondActivity.class);startActivity(intent);

Intent 显式与隐式的用法 

1)显示跳转到下一个活动。

Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);   //startActivity方法


2)隐式跳转到下一个活动:需要下一个活动提供“匹配接口”Intentfilter。就相当于口令,一个人发出一条口令,另一个人对上了说明是自己人。

            Intent intent2 = new Intent("com.example.lenovo.component_activity");intent2.addCategory("com.example.lenovo.component_activity.MY_CATEGORY");startActivity(intent2);Intent intent3 = new Intent(Intent.ACTION_VIEW);intent3.setData(Uri.parse("http://www.baidu.com"));//tel:10086    startActivity(intent3);Intent.ACTION_VIEW   //android.intent.action.VIEWIntent.ACTION_DIALcom.example.lenovo.component_activity.ACTION_START

3)传递数据

上一个活动向下一个活动传递数据

intent.putExtra("extra_data", "dafadfadfa");   //键值对

下一个活动提取数据

intent = getIntent(); String data = intent.getStringExtra("extra_data");    //通过键提取数据getIntExtra(String key, int defaultInt);getBooleanExtra(String key, boolean defaultBoolean);getCharExtra(String key, char defaultChar);

4)返回数据给上一个活动

上一个活动发出请求

startActivityForResult(intent, 1);   //请求码


下一个活动返回数据

Intent intent = new Intent();intent.putExtra("data_return", "Hello MainActivity");setResult(RESULT_OK, intent);finish();


上一个活动接受信息

//重写onActiviResult方法@Overrideprotected void onActivityResult(int requstCode, int resultCode, Intent data){    switch (requstCode){   //请求码        case 1:            if(RESULT_OK == requstCode){  //处理结果码 RESULT_CANCELED                String returnResult = data.getStringExtra("data_return");            }            break;        default:    }}

 

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. Android(安卓)ContentResolver详解
  4. Android调用平台功能具体技巧分享
  5. Android(安卓)的用户层 uevent处理机制
  6. Android使用SQlite数据库
  7. Android提交数据到服务器的两种方式四种方法
  8. Android开发ContentProvider
  9. android 手机Phone进程下无权限发送短信问题的解决办法

随机推荐

  1. android总结之android初识
  2. Android UI系列
  3. android 屏幕适配
  4. Android真的很火吗?
  5. Android(Xamarin)之旅(五)
  6. Android动画设计第3弹
  7. Android基础备忘(android中的分享功能)
  8. Android的BUG - 广为人知的诟病:频繁重启
  9. android makefile(转载)
  10. 让Android 变身回一台真正的Linux系统吧!!!