klren0312 / daliy_knowledge

知识积累,正确使用方式是watch
21 stars 4 forks source link

uniapp 获取startActivityForResult的返回值 #652

Open klren0312 opened 1 year ago

klren0312 commented 1 year ago

https://ask.dcloud.net.cn/question/5783

klren0312 commented 1 year ago
const MainActivity = plus.android.runtimeMainActivity()
                const Intent = plus.android.importClass('android.content.Intent')
                const Uri = plus.android.importClass('android.net.Uri')
                const File = plus.android.importClass('java.io.File')
                const intent = new Intent(Intent.ACTION_GET_CONTENT)
                    .setType('*/*')
                    .addCategory(Intent.CATEGORY_OPENABLE)
                MainActivity.startActivityForResult(Intent.createChooser(intent, '选择文件上传'), 345)
                MainActivity.onActivityResult = (requestCode, resultCode, data) => {
                    if (requestCode == 345) {
                        if (data && resultCode == -1 && data.getData()) {
                            var uri = data.getData();
                            plus.android.importClass(uri);
                            var Build = plus.android.importClass('android.os.Build');
                            var isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
                            console.log(isKitKat)
                            var DocumentsContract = plus.android.importClass('android.provider.DocumentsContract')
                            // DocumentProvider  
                            if (isKitKat && DocumentsContract.isDocumentUri(MainActivity, uri)) {  
                                console.log("版本大于 4.4 ")
                                // ExternalStorageProvider
                                console.log(uri.getAuthority())
                                if ("com.android.externalstorage.documents" == uri.getAuthority()) {  
                                    var docId = DocumentsContract.getDocumentId(uri)
                                    var split = docId.split(":")
                                    var type = split[0]

                                    if ("primary" == type) {  
                                        var Environment = plus.android.importClass('android.os.Environment')
                                        this.fileCallback(Environment.getExternalStorageDirectory() + "/" + split[1])
                                    } else {  
                                        var System = plus.android.importClass('java.lang.System')
                                        var sdPath = System.getenv("SECONDARY_STORAGE")
                                        if (sdPath) {  
                                            this.fileCallback(sdPath + "/" + split[1])
                                        }  
                                    }  
                                }  
                                // DownloadsProvider  
                                else if ("com.android.providers.downloads.documents" == uri.getAuthority()) {  
                                    var id = DocumentsContract.getDocumentId(uri)
                                    var ContentUris = plus.android.importClass('android.content.ContentUris')
                                    var contentUri = ContentUris.withAppendedId(  
                                        //    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id))
                                        Uri.parse("content://downloads/public_downloads"), id)
                                    this.fileCallback(this.getDataColumn(MainActivity, contentUri, null, null))
                                }  
                                // MediaProvider  
                                else if ("com.android.providers.media.documents" == uri.getAuthority()) {  
                                    var docId = DocumentsContract.getDocumentId(uri)
                                    var split = docId.split(":")
                                    var type = split[0]
                                    console.log(type)
                                    var MediaStore = plus.android.importClass('android.provider.MediaStore')
                                    if ("image" == type) {  
                                        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                                    } else if ("video" == type) {  
                                        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
                                    } else if ("audio" == type) {  
                                        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
                                    }  

                                    var selection = "_id=?"
                                    var selectionArgs = new Array()
                                    selectionArgs[0] = split[1]

                                    this.fileCallback(this.getDataColumn(MainActivity, contentUri, selection, selectionArgs))
                                }  
                            }  
                            // MediaStore (and general)  
                            else if ("content" == uri.getScheme()) {  
                                this.fileCallback(this.getDataColumn(MainActivity, uri, null, null))
                            }  
                            // File  
                            else if ("file" == uri.getScheme()) {  
                                this.fileCallback(uri.getPath())
                            }  
                        }
                    }
                }