Android中如何使用代码打开各种类型的文件

Android中如何使用代码打开各种类型的文件,第1张

通过主动的方式通知系统我们需要文件列表,要向系统发送广播

sendBroadcast(new Intent(IntentACTION_MEDIA_MOUNTED, Uriparse(“file://” 

+ EnvironmentgetExternalStorageDirectory())));

然后通过接收器获取系统文列表

  public class MediaScannerReceiver extends BroadcastReceiver 

    { 

        private final static String TAG = ”MediaScannerReceiver”; 

        @Override 

        public void onReceive(Context context, Intent intent) { 

            String action = intentgetAction(); 

            Uri uri = intentgetData(); 

            String externalStoragePath = EnvironmentgetExternalStorageDirectory()getPath(); 

            if (actionequals(IntentACTION_BOOT_COMPLETED)) { 

                // scan internal storage 

                scan(context, MediaProviderINTERNAL_VOLUME); 

            } else { 

                if (urigetScheme()equals(“file”)) { 

                    // handle intents related to external storage 

                    String path = urigetPath(); 

                    if (actionequals(IntentACTION_MEDIA_MOUNTED) && 

                            externalStoragePathequals(path)) { 

                        scan(context, MediaProviderEXTERNAL_VOLUME); 

                    } else if (actionequals(IntentACTION_MEDIA_SCANNER_SCAN_FILE) && 

                            path != null && pathstartsWith(externalStoragePath + ”/”)) { 

                        scanFile(context, path); 

                    } 

                } 

            } 

        } 

        private void scan(Context context, String volume) { 

            Bundle args = new Bundle(); 

            argsputString(“volume”, volume); 

            contextstartService( 

                    new Intent(context, MediaScannerServiceclass)putExtras(args)); 

        } 

        private void scanFile(Context context, String path) { 

            Bundle args = new Bundle(); 

            argsputString(“filepath”, path); 

            contextstartService( 

                    new Intent(context, MediaScannerServiceclass)putExtras(args)); 

        } 

    }

近期在部分安卓手机中获取文件,发现部分安卓手机的uri路径中返回的不是 content://media/extenral/images/media/17766 这种常规类型的 地址

而是返回的是 content://media/extenral/images/media/raw:/storage/emulated/0/Download/my_filepdf 类似这种的地址

这样在咱们常用的获取地址中就会报错了 javalangNumberFormatException' Exception

解决方法

修改isDownloadsDocument(uri) 中的方法按下述方法进行修改就完美解决了

有时候,想实现以下功能:跳转到文件管理器,让用户选择一个文件,并获取用户选择的结果。

跳转到文件管理器可以如下Intent跳转简单实现:

//打开文件管理器

Intent i = new

Intent(IntentACTION_GET_CONTENT);

isetType("file/");

startActivity(i);

为了获取用户选择的结果,最好是startActivityForResult()方法,以便在onActivityResult()中获取用户所选择的结果。

假设当前的需求是让用户选择一张。

Intent i = new Intent(IntentACTION_GET_CONTENT);

isetType("image/");

startActivityForResult(i, MY_REQUEST_CODE);

此时会d出对话框,询问要以什么方式来打开,一般可选项有图库(系统自带的,如果有的话)和文件管理器(如果有的话)。

用户选择了一个文件后,会返回原Activity,在onActivityResult()方法里,可如下 *** 作以判断文件类型。

@Override

protected

void onActivityResult(int requestCode, int resultCode, Intent data) {

if(requestCode ==

PHOTO_REQUEST_CODE)//自定义的一个static final int常量

{

if(resultCode

== RESULT_OK)

{

//得到文件的Uri

Uri

uri = datagetData();

ContentResolver

resolver = getContentResolver();

//ContentResolver对象的getType方法可返回形如content://的Uri的类型

//如果是一张,返回结果为image/jpeg或image/png等

String

fileType =

resolvergetType(uri);

if(fileTypestartsWith("image"))//判断用户选择的是否为

{

//根据返回的uri获取路径

Cursor

cursor = resolverquery(uri,

new

String[]{MediaStoreImagesMediaDATA}, null, null, null);

cursormoveToFirst();

String

path =

cursorgetString(cursorgetColumnIndex(MediaStoreImagesMediaDATA));

//do

anything you want

}

}

}

}

我在网上看到不少童鞋说,获取文件的路径,然后根据后缀名来判断是否为类型。我个人觉得这样比较繁琐而且不太靠谱,可能会漏掉一些后缀名的判断。

所以我采用了上述的方法来判断的类型。其它文件类型可以类似 *** 作。

以上就是关于Android中如何使用代码打开各种类型的文件全部的内容,包括:Android中如何使用代码打开各种类型的文件、android4.4之后怎么根据sd卡中的图片路径path获取图片对应的Uri地址、第五章:Web服务器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10149972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存