大家好,今天跟大家谈谈Intent的用法。
Intent在安卓中主要用于打开另外一个页面,这个页面可能是一个activity也可能是一个应用,也可能是
 
 
其它……
且看下面介绍,总结摘抄网友一些经典例子
 
 
1.无参数Activity跳转 
 Intent it = new Intent(Activity.this, Activity2.class);   
 startActivity(it);   
 
 
2.向下一个Activity传递数据(使用Bundle或Intent.putExtras) 
Intent it = new Intent(Activity.this, Activity2.class);   
Bundle bundle=new Bundle();   
bundle.putString("name", "This is from MainActivity!");   
it.putExtras(bundle); // it.putExtra(“test”, "shuju”);   
startActivity(it);   // startActivityForResult(it,REQUEST_CODE);  
相应的对于数据的获取可以采用: 
Bundle bundle=getIntent().getExtras();   
String name=bundle.getString("name");  
 
 
如果activity设为singletask,那么接收数据时也要实现onNewIntent()方法
3.向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的
 
 
Activity) 
Intent intent=getIntent();   
Bundle bundle2=new Bundle();   
bundle2.putString("name", "This is from ShowMsg!");   
intent.putExtras(bundle2);   
setResult(RESULT_OK, intent);  
4.回调上一个Activity的结果处理函数(onActivityResult) 
@Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
        // TODO Auto-generated method stub   
        super.onActivityResult(requestCode, resultCode, data);   
        if (requestCode==REQUEST_CODE){   
            if(resultCode==RESULT_CANCELED)   
                  setTitle("cancle");   
            else if (resultCode==RESULT_OK) {   
                 String temp=null;   
                 Bundle bundle=data.getExtras();   
                 if(bundle!=null)   temp=bundle.getString("name");   
                 setTitle(temp);   
            }   
        }   
    }  
5、显示网页 
Uri uri = Uri.parse("http://google.com");     
Intent it = new Intent(Intent.ACTION_VIEW, uri);     
startActivity(it);      
6、显示地图 
Uri uri = Uri.parse("geo:38.899533,-77.036476");     
Intent it = new Intent(Intent.ACTION_VIEW, uri);      
startActivity(it);      
//其他 geo URI 
//geo:latitude,longitude     
//geo:latitude,longitude?z=zoom     
//geo:0,0?q=my+street+address     
//geo:0,0?q=business+near+city     
//google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom   
7、路径规划 
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%0startLng&daddr=endLat%
0endLng&hl=en");     
Intent it = new Intent(Intent.ACTION_VIEW, uri);     
startActivity(it);     
//where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456  
   
8、打电话
// 叫出拨号程序
Uri uri = Uri.parse("tel:0800000123");
Intent it = new Intent(Intent.ACTION_DIAL, uri);
startActivity(it);
// 直接打电话出去
Uri uri = Uri.parse("tel:0800000123");
Intent it = new Intent(Intent.ACTION_CALL, uri);
startActivity(it);
9、传送SMS/MMS
// 传送SMS
Uri uri = Uri.parse("smsto://0800000123");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body", "The SMS text");
startActivity(it);
// 传送 MMS
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);
10、发送 Email(三种方法)
  
 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"));  
 Uri uri = Uri.parse("mailto:fengsheng.studio@hotmail.com");            
   Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
11、传送附件
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType(mimeType);
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(intent);
// 以上有两个变量需要说明:
// 1. mimeType: 如果是图片,则为"image/*",如果是音频,则为"audio/*",如果是视频,则为"video/*"
// 2. uri:如果是直接读取到文件路径并发送,则为Uri.fromFile(new File(filePath));
// 如果是从数据库中查循出来的uri,则直接传入即可.
12、播放多媒体(两种方法)
Uri uri = Uri.parse("file:///sdcard/song.mp3");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
it.setType("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);
Market 相关 
13、寻找某个应用/显示某个应用的相关信息   
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 
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
       
14、打开一个应用程序 
ComponentName 两个参数一个是包名 一个是包下的主类
final Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings",
"com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Uninstall 应用程序 
Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
14、返回桌面 
Intent unMyIntent = new Intent(Intent.ACTION_MAIN);
unMyIntent.addCategory(Intent.CATEGORY_HOME);
startActivity(unMyIntent);
15、调用程序打开相应文件
在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开
 
 
的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放
软件才可以使用,这时程序会通过Intent查找可以使用的软件
实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的
 
 
Intent,另一个就是不同格式的文件打开的Intent不同
1、在values目录下定义后缀数组文件fileendings
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="fileEndingImage">
        <item>.png</item>
        <item>.gif</item>
        <item>.jpg</item>
        <item>.jpeg</item>
        <item>.bmp</item>
    </array>
<array name="fileEndingAudio">
        <item>.mp3</item>
        <item>.wav</item>
        <item>.ogg</item>
        <item>.midi</item>
    </array>
<array name="fileEndingVideo">
        <item>.mp4</item>
        <item>.rmvb</item>
        <item>.avi</item>
        <item>.flv</item>
    </array>
<array name="fileEndingPackage">
        <item>.jar</item>
        <item>.zip</item>
        <item>.rar</item>
        <item>.gz</item>
        <item>.apk</item>
        <item>.img</item>
    </array>
<array name="fileEndingWebText">
        <item>.htm</item>
        <item>.html</item>
        <item>.php</item>
        <item>.jsp</item>
    </array>
<array name="fileEndingText">
        <item>.txt</item>
        <item>.java</item>
        <item>.c</item>
        <item>.cpp</item>
        <item>.py</item>
        <item>.xml</item>
        <item>.json</item>
        <item>.log</item>
    </array>
<array name="fileEndingWord">
    <item>.doc</item>
    <item>.docx</item>
</array>
<array name="fileEndingExcel">
    <item>.xls</item>
    <item>.xlsx</item>
</array>
<array name="fileEndingPPT">
    <item>.ppt</item>
    <item>.pptx</item>
</array>
<array name="fileEndingPdf">
    <item>.pdf</item>
</array>
</resources>
2、定义OpenFiles工具类,只需传输File参数即可,然后通过返回的Intent打开文件   
       
public class OpenFiles {
     //android获取一个用于打开HTML文件的intent
       public static Intent getHtmlFileIntent(File file)
       {
Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority
 
 
("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();
           Intent intent = new Intent("android.intent.action.VIEW");
           intent.setDataAndType(uri, "text/html");
           return intent;
       }
     //android获取一个用于打开图片文件的intent
       public static Intent getImageFileIntent(File file)
       {
           Intent intent = new Intent("android.intent.action.VIEW");
           intent.addCategory("android.intent.category.DEFAULT");
           intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           Uri uri = Uri.fromFile(file);
           intent.setDataAndType(uri, "image/*");
           return intent;
       }
       //android获取一个用于打开PDF文件的intent
       public static Intent getPdfFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addCategory("android.intent.category.DEFAULT");
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "application/pdf");
         return intent;
       }
     //android获取一个用于打开文本文件的intent
     public static Intent getTextFileIntent(File file)
     {    
       Intent intent = new Intent("android.intent.action.VIEW");
       intent.addCategory("android.intent.category.DEFAULT");
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       Uri uri = Uri.fromFile(file);
       intent.setDataAndType(uri, "text/plain");
       return intent;
     }
    
     //android获取一个用于打开音频文件的intent
       public static Intent getAudioFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         intent.putExtra("oneshot", 0);
         intent.putExtra("configchange", 0);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "audio/*");
         return intent;
       }
       //android获取一个用于打开视频文件的intent
       public static Intent getVideoFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         intent.putExtra("oneshot", 0);
         intent.putExtra("configchange", 0);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "video/*");
         return intent;
       }
    
    
       //android获取一个用于打开CHM文件的intent
       public static Intent getChmFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addCategory("android.intent.category.DEFAULT");
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "application/x-chm");
         return intent;
       }
    
    
     //android获取一个用于打开Word文件的intent
       public static Intent getWordFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addCategory("android.intent.category.DEFAULT");
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "application/msword");
         return intent;
       }
     //android获取一个用于打开Excel文件的intent
       public static Intent getExcelFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addCategory("android.intent.category.DEFAULT");
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "application/vnd.ms-excel");
         return intent;
       }
     //android获取一个用于打开PPT文件的intent
       public static Intent getPPTFileIntent(File file)
       {
         Intent intent = new Intent("android.intent.action.VIEW");
         intent.addCategory("android.intent.category.DEFAULT");
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         Uri uri = Uri.fromFile(file);
         intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
         return intent;
       }
       //android获取一个用于打开apk文件的intent
       public static Intent getApkFileIntent(File file)
       {
           Intent intent = new Intent();  
           intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
           intent.setAction(android.content.Intent.ACTION_VIEW);  
           intent.setDataAndType(Uri.fromFile(file),  "application/vnd.android.package-
 
 
archive");  
           return intent;
       }
}
3、定义用于检查要打开的文件的后缀是否在遍历后缀数组中
private boolean checkEndsWithInStringArray(String checkItsEnd, 
                    String[] fileEndings){
        for(String aEnd : fileEndings){
            if(checkItsEnd.endsWith(aEnd))
                return true;
        }
        return false;
    }
4、通过调用OpenFiles类返回的Intent,打开相应的文件
if(currentPath!=null&¤tPath.isFile())
                {
                    String fileName = currentPath.toString();
                    Intent intent;
                    if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingImage))){
                        intent = OpenFiles.getImageFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingWebText))){
                        intent = OpenFiles.getHtmlFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingPackage))){
                        intent = OpenFiles.getApkFileIntent(currentPath);
                        startActivity(intent);
 
 
 
 
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingAudio))){
                        intent = OpenFiles.getAudioFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingVideo))){
                        intent = OpenFiles.getVideoFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingText))){
                        intent = OpenFiles.getTextFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingPdf))){
                        intent = OpenFiles.getPdfFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingWord))){
                        intent = OpenFiles.getWordFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingExcel))){
                        intent = OpenFiles.getExcelFileIntent(currentPath);
                        startActivity(intent);
                    }else if(checkEndsWithInStringArray(fileName, getResources().
                            getStringArray(R.array.fileEndingPPT))){
                        intent = OpenFiles.getPPTFileIntent(currentPath);
                        startActivity(intent);
                    }else
                    {
                        showMessage("无法打开,请安装相应的软件!");
                    }
                }else
                {
                    showMessage("对不起,这不是文件!");
                }

( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)的更多相关文章

  1. Android NDK开发及调用标准linux动态库.so文件

    源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...

  2. Android,使用Intent或Bundle传递参数,跳转页面。

    (1)使用Intent跳转页面: 第一个activity:MainActivity.java中: Intent myIntent = new Intent(); myIntent.putExtra(& ...

  3. Android项目开发全程(二)--Afinal用法简单介绍

    本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...

  4. 跟我一起玩Win32开发(19):浏览和打开文件

    在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用 ...

  5. android 开发 获取各种intent (图片、apk文件、excel、pdf等文件)

    public static Intent openFile(String filePath){ File file = new File(filePath); if(!file.exists()) r ...

  6. Android studio 开发中 用git实现批量忽略特定文件的方法

    git实现批量忽略特定文件的方法 在用AndroidStudio开发项目的时候,3个人协同开发,那么用Git同步代码,会将模块中的大量iml文件同步,每次都会提交和更新,一个一个的去忽略他们,显然是最 ...

  7. Android初级教程理论知识(第二章布局&amp;读写文件)

    常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRightOf="@id/tv1" 设置在指 ...

  8. android安卓开发基础小笔记,添加按钮事件,打开新窗体,窗体传值,回传

    给一个按钮添加onclick事件 //获取按钮对象 Button Aiyo = (Button)findViewById(R.id.button1); Aiyo.setOnClickListener( ...

  9. 浅谈Android移动开发程序员的职业发展之路

    现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...

随机推荐

  1. 8天掌握EF的Code First开发系列之动手写第一个Code First应用

    返回<8天掌握EF的Code First开发>总目录 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 自我测试 上一篇<8 ...

  2. 分布式追踪系统dapper

    http://www.cnblogs.com/LBSer/p/3390852.html 最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:h ...

  3. ngix代理-- 摘抄

    有两个网站,http://192.168.1.3:80和http://192.168.1.3:81, 通过nginx的配置实现只用本机作为唯一的代理服务器,只用一个端口, 实现这样的效果:请求http ...

  4. Android 图表绘制 achartengine 示例解析

    一. AChartEngine 简介 1. 项目地址 AChartEngine 简介 : AChartEngine 是 Android 平台的图表开发库, 能绘制 折线图, 饼图, 气泡图, 柱状图, ...

  5. PowerDesigner 16.5对SQL Server 2012 生成数据库时&quot;不支持扩展属性&quot;问题

    团队合作设计一套系统数据模型,创建了PDM后,Table.View.Store Procedure等都创建好了,且创建了多个Schema方便管理这些数据库对象,但Table.view.Column等对 ...

  6. 调用DEDE日期时间格式整理大全

    dedecms 日期时间格式大全,大家可以根据需要选择.DEDECMS利用strftime()函数格式化时间的所有参数详解,包括年份日期进制.小时格式等,大家收藏吧,呵. 日期时间格式 (利用strf ...

  7. 如何在一个工作站里创建多个工程(同一个xcode下面创建多个工程)

    第一步,理解: 怎么会有一个xcode下面创建两个工程这一说呢,一个工程代表一个项目,意思就是有两个项目了.错.其实在一个窗口下面并不是两个工程,而是一个workspace 即一个工作站.在工作站里面 ...

  8. 基于HOG特征的Adaboost行人检测

    原地址:http://blog.csdn.net/van_ruin/article/details/9166591 .方向梯度直方图(Histogramof Oriented Gradient, HO ...

  9. boost解析XML方法教程

    boost库在解析XML时具有良好的性能,可操作性也很强下地址有个简单的说明 http://blog.csdn.net/luopeiyuan1990/article/details/9445691 一 ...

  10. 【集美大学1411_助教博客】团队作业9——测试与发布(Beta版本)

    写在前面的话 已经看到了大家的发布成果,很欣喜,虽然有的团队的产品还是有一点问题,但大家也都发布成功了,这就是软件的魅力.但还是要说一些问题,大家录的视频不是没人讲解就是讲得太快,在我看来这都没有在卖 ...