是否可以获得存储在 /sdcard/download/ 上的安装程序文件名?我想从应用程序中获取安装它的 apk 文件名。有一种简单的方法可以做到这一点,尤其是对于非市场应用程序?
问问题
3295 次
2 回答
3
嗯,我不确定你所说的 sdcard 或下载文件夹是什么意思,但你可以在系统 /data 目录中获取 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 应用程序代码:(只需运行进程)
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();
上面的代码应该简单地为您提供包含“package:/data/app/mk.trelloapp-1/base.apk”的字符串
当您在 /data 目录中获取路径时,您可能会尝试在其他目录中搜索相同(相似)的文件(假设它没有被删除),因为 android 包在安装时被复制到 /data 目录。
于 2015-12-10T06:50:05.800 回答
3
更好的方法肯定是在清单中包含版本字符串。这确实是唯一可靠(和专业)的方法。Android 不会将包含 APK 的文件的名称存储在任何地方,因此您无法获取它。
从理论上讲,您可能可以使用FileObserver
, 在某些目录中监视文件创建,并且每次使用扩展名创建文件时,.apk
您都可以打开文件,提取清单,找到 APK 的包名称,然后将其与某些持久存储中的文件名。然后,当您需要获取版本信息时,您可以在持久化存储中查找与您需要的包名匹配的文件名。
当然,这仅适用于在下载/安装其他 APK 文件之前在设备上安装您的应用程序的情况。这将无法找出您自己的应用程序的文件名。
于 2015-12-07T12:58:06.680 回答