Android_磊子
Android_磊子
  • 发布:2017-04-01 18:53
  • 更新:2022-12-14 08:40
  • 阅读:9747

如何通过Native.js进行文件选取

分类:Native.js

5+ API中plus.gallery.pick只能选取图片或是视频文件,那问题来了,其他类型文件如何选取。
此时就该发挥Native.js的强大之处了,如果会安卓原生编程,代码so easy。不会的同学你可以选择找到代码copy,会是百度原生代码实现然后转换为Native.js语法。废话不多说,反正你可以找到很多方式配合5+API完成自己的app。
开吃。。。

window.PickFile = function(callback,acceptType){  
    function ip(obj){  
        plus.android.importClass(obj);  
        return obj;  
    }  
    if(plus.os.name == 'Android' && typeof callback == 'function'){  
        var CODE_REQUEST = 1000;  
        var context = plus.android.runtimeMainActivity();  
        ip(context);  
        var Intent = plus.android.importClass('android.content.Intent');  
        var intent = new Intent(Intent.ACTION_GET_CONTENT);  
        intent.addCategory(Intent.CATEGORY_OPENABLE);  
        if(acceptType){  
            intent.setType(acceptType);  
        }else{  
            intent.setType("*/*");  
        }  
        context.onActivityResult = function(requestCode,resultCode,intentData){  
            if(requestCode == CODE_REQUEST){  
                if(intentData){  
                    var uriValue = intentData.getData();  
                    plus.android.importClass(uriValue);  
                    var scheme = uriValue.getScheme();  
                    if(scheme == 'content'){//还需要进行数据库查询,一般图片数据  
                        var cursor = ip(context.getContentResolver()).query(uriValue,['_data'], null, null, null);  
                        if(cursor){  
                            ip(cursor).moveToFirst();  
                            var columnIndex = cursor.getColumnIndex('_data');  
                            picturePath = cursor.getString(columnIndex);  
                            cursor.close();  
                            callback(picturePath);//返回文件路径  
                        }  
                    }else if(scheme == 'file'){  
                        callback(uriValue.getPath());//返回文件路径  
                    }  
                }else{  
                    callback(null);  
                }  
            }  
        }  
        context.startActivityForResult(intent,CODE_REQUEST);  
    }  
}
4 关注 分享
Trust x***@qq.com BoredApe brush

要回复文章请先登录注册

水调asd

水调asd

回复 2***@qq.com :
请问你这个问题解决了吗
2022-12-14 08:40
清茶涩

清茶涩

可以拿到文件真实路径,怎么把文件上传到服务器呢,原生的有点懵
2022-11-23 11:20
9***@qq.com

9***@qq.com

为什么只有选择图库才能返回路径,选择最近是返回undefined,选择文件管理器是返回null
2021-01-09 09:29
2***@qq.com

2***@qq.com

回复 2***@qq.com :
plus.android.importClass('android.net.Uri'); 引入Uri类
2020-08-06 14:46
1***@qq.com

1***@qq.com

回复 android_yang :
路径返回是可以了,请问可以通过什么方法可以获取到返回文件的大小、类型等其他属性呢?看不太懂原生代码,或者哪里有文档可查的有推荐吗
2019-06-20 10:18
2***@qq.com

2***@qq.com

回复 2***@qq.com :
没有
2019-06-13 08:43
2***@qq.com

2***@qq.com

回复 2***@qq.com :
你好,请问你的问题解决了吗
2019-06-12 10:58
2***@qq.com

2***@qq.com

回复 2***@qq.com :
最近打开的报 undefied ,在文件管理器里,找到,就没事
2019-05-29 17:40
2***@qq.com

2***@qq.com

回复 android_yang :
var contentUri = ContentUris.withAppendedId(
// Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
Uri.parse("content://downloads/public_downloads"), id);

选图片没事,但是先其他类型的文件时,执行到这,就报 undefined ,比如选一个 .docx
2019-05-29 17:25
2***@qq.com

2***@qq.com

返回值为 null
2019-05-29 13:58