Android:如何以编程方式获取安装程序文件名?

Android:如何以编程方式获取安装程序文件名?,android,apk,android-install-apk,Android,Apk,Android Install Apk,可以获取存储在/sdcard上的安装程序文件名/ 下载/?我想从应用程序中获取安装它的apk文件名。 有一种简单的方法可以做到这一点,特别是对于非市场应用程序?更好的方法肯定是在清单中包含版本字符串。这确实是唯一可靠(专业)的方法。Android不会将包含APK的文件名存储在任何地方,因此没有办法获取它 从理论上讲,您可能可以使用文件观察者构建一些东西,该观察者监视特定目录中的文件创建,每次使用扩展名.apk创建文件时,您都可以打开文件,提取清单,找到APK的包名,然后将其与文件名一起存储在某个

可以获取存储在/sdcard上的安装程序文件名/ 下载/?我想从应用程序中获取安装它的apk文件名。
有一种简单的方法可以做到这一点,特别是对于非市场应用程序?

更好的方法肯定是在清单中包含版本字符串。这确实是唯一可靠(专业)的方法。Android不会将包含APK的文件名存储在任何地方,因此没有办法获取它

从理论上讲,您可能可以使用
文件观察者
构建一些东西,该观察者监视特定目录中的文件创建,每次使用扩展名
.apk
创建文件时,您都可以打开文件,提取清单,找到APK的包名,然后将其与文件名一起存储在某个持久性存储器中。然后,当您需要获取版本信息时,您可以在persisten存储中查找与所需包名匹配的文件名


当然,只有在下载/安装其他APK文件之前,您的应用程序才安装在设备上。这无法找出您自己应用程序的文件名。

嗯,我不确定SD卡或下载文件夹是什么意思,但您可以在系统/数据目录中获得apk路径:

命令行:

$ adb shell pm list packages | grep mk.trelloapp
package:mk.trelloapp
$ adb shell pm path mk.trelloapp
package:/data/app/mk.trelloapp-1/base.apk
或者从您的android应用程序代码:(只需运行进程)

上面的代码应该只给出包含“package:/data/app/mk.trelloapp-1/base.apk”的字符串


当您在/data目录中获取路径时,您可能会尝试在其他目录中搜索相同(类似)的文件(假设未删除),因为安装时android软件包会复制到/data目录。

您所说的“安装程序文件名”是什么意思?apk的名字?如果是,你为什么想要它?请添加更多详细信息。是的,我想获取存储在sd卡上的apk的名称。我创建了apk文件并将其存储在服务器上,当有人想要下载它时,服务器会生成具有唯一名称的文件,例如:“application00086.apk”。问题是:如何从安装后存储在目录:/data/app/I-find-interest-method:getInstallerPackageName中的我的应用程序中获取此唯一的文件名,但此方法仅返回安装程序包名,并且仅针对Android Market上分发的应用程序,我想获取安装程序文件名,但不想在市场上发布我的应用程序。@Wolfie:我和你面临同样的问题。你找到解决办法了吗。非常感谢你!我也有同样的问题。有人找到解决办法了吗?这没用。OP希望能够获得下载的APK文件的原始文件名,因为他的应用程序的版本号编码为该文件名的一部分。
/data
的APK路径不包含此信息,因为它只使用包名。
        Process exec = Runtime.getRuntime().exec("pm path mk.trelloapp");

        exec.waitFor();

        InputStream inputStream = exec.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

        StringBuilder builder = new StringBuilder();
        String line = null;
        while( ( line = br.readLine()) != null ) {
            builder.append(line);
        }

        String commandOutput = builder.toString();