Android——Intent做啥去啦?

本文介绍如何在Android系统中通过Intent机制打开各种类型的文件,包括图片、文档、视频等,并提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       Android系统默认内置了一些可打开的系统应用,但还不能应付所有的需求。如打开视频文件、word等需安装播放软件才可以。此时程序通过Intent查找可以使用的软件实现通过代码。

       打开一个文件需要2部分信息,一是获取文件的后缀,据需求匹配相应的Intent;二是文件不同打开的Intent也不同

1、在values目录下定义后缀数组文件fileendings 


[html] view plaincopyprint?<?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> //www.sctarena.com  
<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>.p<?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>df</item>   
</array>   
</resources>   

    <?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>.p<?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>df</item> 
    </array> 
    </resources> 


2、定义OpenFiles工具类,只需传输File参数即可,然后通过返回的Intent打开文件 


[java] view plaincopyprint?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;   
}   
    
    
}   

    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、定义用于检查要打开的文件的后缀是否在遍历后缀数组中 


[java] view plaincopyprint?private boolean checkEndsWithInStringArray(String checkItsEnd,   
String[] fileEndings){   
for(String aEnd : fileEndings){   
if(checkItsEnd.endsWith(aEnd))   
return true;   
}   
return false;   
}   

    private boolean checkEndsWithInStringArray(String checkItsEnd, 
    String[] fileEndings){ 
    for(String aEnd : fileEndings){ 
    if(checkItsEnd.endsWith(aEnd)) 
    return true; 
    } 
    return false; 
    } 


4、通过调用OpenFiles类返回的Intent,打开相应的文件 


[java] view plaincopyprint?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("对不起,这不是文件!");   
}   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值