由于this annoying Android limitation我需要用户重新安装我的应用程序,以便其他应用程序检测到清单权限。以编程方式重新安装应用程序apk而不下载
这对用户来说已经是令人沮丧的事了,但是除此之外,我无法看到从存储在/ data/app的apk中重新安装我的应用程序的方式,因此我必须将相同的版本下载到存储卡在发射通常的安装意图之前。
我急切地等待有人告诉我我错过了一些明显的东西!我画了一张空白...
在此先感谢。
如果您希望看到问题解决,请对问题进行解答!干杯。
编辑:随着@hackbod记的意见,你可以使用下面的代码来启动安装对话框。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(this.getApplicationInfo().sourceDir)),
"application/vnd.android.package-archive");
startActivity(intent);
在我的果冻豆设备,这提供了两个选项:包安装和验证和安装。我不知道如果是后者将处理的问题:
- 安装您的应用程序这种方式可能会从Play商店
我的应用程序是免费删除其所有权,所以我无法测试的支付问题:然而
- 注意如果您的应用程序是向前锁定(这是不可避免的开始JB,由于应用程序加密所有付费应用程序),那么这将无法工作becau SE您的应用程序的可执行文件是不会被别人读取
虽然hackbod结束与这表明,如果你是通过你自己的代码执行此,为你自己的应用程序,它是可读的“别人读”?如果你能测试这个,请纠正我,我错了。
您可以将其从/ data/app复制到存储卡。尽管无法浏览该目录,但它所包含的文件通常是可读的 - 尽管这并不能保证(并且这并不总是安装位置)。另一种选择可能是不使用权限系统,但尝试对请求的包进行自己的认证。 –
谢谢克里斯 - 我的应用程序需要安装在设备上,否则它将无法正常工作,所以我对用户安装位置的最小担心。我认为这是你所指的唯一考虑因素?另外,由于/ data/app是可读的,我可以检查apk是否位于其他位置之前。从我的搜索中,我无法找到一种方法来从该位置传输apk,除非使用根函数......想知道是否有方法...我不确定您的“自己的身份验证”是什么意思?干杯。 – brandall
如果它是可读的(就像它通常那样),则不需要root将其复制到允许写入的地方(例如具有适当清单许可的sdcard)。但是,/ data/app并不总是被安装的地方。有时apk文件名在安装过程中发生变化。您可以从/data/system/packages.xml中确定位置和安装的名称,但此时您对私有内部功能的相当深入,这可能不是未来的证明。真的,重新下载可能是您最好的选择 - 至少,将其作为后备选项。 –