在 android 中共享文件时媒体不可用

Media unavailable while sharing a file in android

提问人:R AM 提问时间:10/16/2023 最后编辑:R AM 更新时间:10/19/2023 访问量:50

问:

我正在实现一个共享已安装应用程序 apk 文件的 android 应用程序。 都很好;但是在共享时,我收到了有关“媒体不可用”的错误。 我该如何解决?

老实说,我正在尝试从 SoutceDir 和我的应用程序数据文件夹(storage/emulated/ 0/Android/data/com.example.myAppName)共享。

请帮帮我!🙏

我的代码在打击:

private void shareApk() {
    ArrayList<Uri> pickedAppsUri = new ArrayList<Uri>();
    // Preparing cache folder
    // Deleting older files
    for(File f : getExternalCacheDir().listFiles()){
        f.delete();
    }
    
    // Make a copy from selected apps apk files into cache folder
    for (int i = 0; i < apkPackageInfoList.size(); i++) {
        if (checkMarksVisibilityState.get(i)) {
            String apkFileName = getPackageManager().getApplicationLabel(apkPackageInfoList.get(i).applicationInfo) + "";
            File apkTmpFile = new File(getExternalCacheDir(), apkFileName+".apk");
            try {
                InputStream inStream = new  FileInputStream(new File(apkPackageInfoList.get(i).applicationInfo.sourceDir));
                OutputStream outTemp = new FileOutputStream(apkTmpFile);
                OutputStreamWriter writerTmp = new OutputStreamWriter(outTemp);
                writerTmp.write(inStream.read());
                outTemp.flush();
                outTemp.close();
                writerTmp.close();
            } catch (FileNotFoundException | IOException e) {}
            pickedAppsUri.add(Uri.parse(apkTmpFile.getPath()));
        }
    }
    
    // Create share intent
    Intent intent = new Intent();
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.setType("*/*");
    if (pickedAppsUri.size() == 1) {
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_STREAM, pickedAppsUri.get(0));
    } else {
        intent.setAction(Intent.ACTION_SEND_MULTIPLE);
        intent.putExtra(Intent.EXTRA_STREAM, pickedAppsUri);
    }
    for(ResolveInfo ri : getPackageManager().queryIntentActivities(intent,0)){
        for(Uri uri : pickedAppsUri){
            grantUriPermission(ri.activityInfo.packageName, uri, 1);
        }
    }
    startActivity(Intent.createChooser(intent, "Share via:"));
}

我想我无法访问 sourceDir,因为 Android/data/com.example.shareApk/cache 文件夹中复制的文件是空的(0 字节文件)

Android 文件 APK URI 分享

评论

1赞 Robert 10/16/2023
请发布您用于分享的相关代码。请注意,这不是有效的 Android 路径,因为只是 MTP 文件共享的虚拟根目录。InternalStorage/Android/data/com.example.myAppNameInternalStorage

答: 暂无答案