从下载管理器我可以下载更新的APK。成功下载安装POP UP即将进行安装或取消。 有没有办法安装APK而不要求安装。 因为如果我点击POPUP外面,POPUP就会消失。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path)),
"application/vnd.android.package-archive");
intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
答案 0 :(得分:2)
在下面的方法中查找data / local上的预定义标记,并尝试安装位于 / system / preinstall 目录中的apk文件(可以更改)。
在您的使用中,请删除 apks_installed 。在下次启动时,android将在预安装目录中安装apks
添加一个在start(init.d)脚本
运行的服务service blabla /system/bin/blabla.sh
user root
group root
disabled
oneshot
编写一个blabla.sh文件并将其放在/ system / bin /目录下
#!/system/bin/sh
MARK=/data/local/apks_installed
PKGS=/system/preinstall/
if [ ! -e $MARK ]; then
busybox find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;
touch $MARK
fi
注意:您可能已经意识到还需要安装busybox
我可能犯了一些错误,但我认为你理解这一点
答案 1 :(得分:1)
通常,您需要将设备植根或具有系统固件签名。
您可以在应用中创建ApplicationManager
和OnInstalledPackaged
的副本。
使用它你可以运行类似的东西:
public static void installApp(Context context, File path, OnInstalledPackaged callback) {
try {
final ApplicationManager am = new ApplicationManager(context);
if(callback != null) am.setOnInstalledPackaged(callback);
am.installPackage(path);
} catch (Exception e) {
if(Utils.LOGGING) Utils.log("E::"+e.toString());
}
}
答案 2 :(得分:1)
是的,您可以通过制作应用系统应用程序然后运行命令 pm install 来静默安装apk:
**private boolean installApk(String apkPath)
{
Command installEvent = new Command(getCommandList("pm install "
+ apkPath));
return installEvent.executeCommandList();
}**
它对我有用。
答案 3 :(得分:0)
不,出于安全原因,这是不可能的。您可以启动安装,但由用户决定。
但是,如果手机是root用户,则可以通过编程方式执行此操作,但这不是大多数应用程序的选项。代码与此类似:
public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException {
observer = new PackageInstallObserver();
pm = context.getPackageManager();
Class<?>[] types = new Class[] {Uri.class, IPackageInstallObserver.class, int.class, String.class};
Class<?>[] uninstalltypes = new Class[] {String.class, IPackageInstallObserver.class, int.class};
method = pm.getClass().getMethod("installPackage", types);
uninstallmethod = pm.getClass().getMethod("deletePackage", uninstalltypes);
}
public void uninstallPackage(String packagename) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
uninstallmethod.invoke(pm, new Object[] {packagename, observer, 0});
}
public void installPackage(Uri apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
method.invoke(pm, new Object[] {apkFile, observer, INSTALL_REPLACE_EXISTING, null});
}
此处有更多详情:
install / uninstall APKs programmatically (PackageManager vs Intents)
https://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/
答案 4 :(得分:0)
由于应用程序不是系统级别,您无法在没有用户交互的情况下安装apk
但是在三星设备中如果您从三星获取enterpriase许可证您可以静默安装和卸载应用程序