我需要安装apk文件没有任何用户提示像谷歌的PlayStore做。我知道这个问题已经被问过很多次了,但我仍然没有找到任何可以解决的答案。我只是从我的sd卡安装应用程序,我尝试以下方式,
public void getInstall(Context context) {
File file = new File(Environment.getExternalStorageDirectory()
+ "/Demo.apk");
Uri mPackageURI = Uri.fromFile(file);
ApplicationManager appMgr = null;
try {
appMgr = new ApplicationManager(context);
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int installFlags = 1;
PackageManager pm = context.getPackageManager();
Method method = null;
try {
method = pm.getClass().getMethod(
"installPackage",
new Class[] { android.net.Uri.class,
android.content.pm.IPackageInstallObserver.class,
Integer.TYPE, String.class });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String installerPackageName = "com.myapp.demo";
PackageInstallObserver observer = appMgr.new PackageInstallObserver();
try {
method.invoke(pm, new Object[] { mPackageURI, observer,
installFlags, installerPackageName });
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是我得到错误Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES
,即使我在我的清单文件中添加了这个权限。
我的设备没有根,我希望它没有根,在许多答案中,我发现这是不可能的,根据安全原因,他们不允许,但如果它是可能的与PlayStore和AndroidLost应用程序,那么为什么不与我们?
如果可能的话,我需要帮助!
谢谢,
我的设备没有根,我希望它没有根
这是不可能在Android上的第三方应用程序。Google Play能够做到这一点,因为它是安装到/system/app
而不是/data/app
。如果您可以说服任何OEM或ROM制造商将您的应用程序放在系统分区上,您可以利用INSTALL_PACKAGES
权限,因为这只授予系统应用程序。
无论如何,这是一个Android反模式。如果允许你在未经用户同意的情况下任意安装应用程序,这将是一个严重的安全漏洞,用户将不再对设备负责。