You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android分享APK时文件名显示为“untitled”的问题求助(附代码)

解决APK分享时文件名变为“untitled”的问题

嘿,我来帮你搞定这个分享APK时文件名变“untitled”的问题!

为啥会出现这个问题?

你直接用app.publicSourceDir生成的file://类型Uri去分享,接收方的应用没法从这个Uri里正确解析出原APK的文件名,所以就默认显示成“untitled”了。而且在Android 7.0及以上版本,直接分享file:// Uri还会触发FileUriExposedException的安全问题,所以得用FileProvider来做正确的文件分享,同时明确指定文件名。

一步步解决:

  1. 先在AndroidManifest里注册FileProvider
    打开你的AndroidManifest.xml,在<application>标签里加这段注册代码:

    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
    

    要是你用的是旧的support库,就把androidx.core.content.FileProvider换成android.support.v4.content.FileProvider就行。

  2. 创建file_paths.xml配置文件
    在res/xml目录下新建一个file_paths.xml文件(没有xml目录就自己建一个),把下面的内容放进去,用来指定我们要分享的APK文件路径:

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Android 10及以上推荐用这个,对应应用的安装目录 -->
        <application-path name="app_apk" path="." />
        <!-- 低版本可以用这个替代 -->
        <!-- <files-path name="apk_files" path="." /> -->
    </paths>
    
  3. 修改分享按钮的代码逻辑
    把你原来的点击事件代码换成下面这段,用FileProvider生成安全的内容Uri,同时明确传递原文件名:

    btnShare.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ApplicationInfo app = getApplicationContext().getApplicationInfo();
            // 把路径转成File对象,方便后续操作
            File apkFile = new File(app.publicSourceDir);
            
            // 用FileProvider生成符合安全规范的Uri
            Uri apkUri = FileProvider.getUriForFile(
                getApplicationContext(),
                getPackageName() + ".fileprovider", // 这里要和Manifest里的authorities一致
                apkFile
            );
            
            Intent sharingIntent = new Intent(Intent.ACTION_SEND);
            // 指定APK的MIME类型
            sharingIntent.setType("application/vnd.android.package-archive");
            // 传递文件Uri
            sharingIntent.putExtra(Intent.EXTRA_STREAM, apkUri);
            // 把原文件名传进去,让分享应用能正确显示
            sharingIntent.putExtra(Intent.EXTRA_SUBJECT, apkFile.getName());
            // 给接收应用临时的读取权限,不然对方拿不到文件
            sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            
            // 弹出分享选择器
            startActivity(Intent.createChooser(sharingIntent, "分享APK"));
        }
    });
    

几个关键点要注意:

  • FileProvider是必须的:这是Android官方推荐的安全文件分享方式,既解决了文件名的问题,也避免了高版本系统的安全异常。
  • 文件名的传递:通过Intent.EXTRA_SUBJECT把原文件名传给接收方,大部分分享应用都会读取这个字段来显示文件名,配合FileProvider的Uri,就能完美保留原文件名了。
  • 权限不能忘:一定要加Intent.FLAG_GRANT_READ_URI_PERMISSION,不然接收应用会没有权限访问这个APK文件,分享就会失败。

这么改完之后,你再分享APK的时候,就能看到原文件名啦,同时也兼容各个Android版本~

内容的提问来源于stack exchange,提问作者ArjunPatidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:33:45