- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试仅通过使用 PackageInstaller 和 PackageManager API 在我的设备上安装包(从在其上运行的设备所有者应用程序)。我一直在寻找示例,但找不到适合我需要的任何内容。
这是我安装 Facebook 应用程序的代码示例:
PackageManager pm = getPackageManager();
PackageInstaller mPackageInstaller = pm.getPackageInstaller();
PackageInstaller.SessionParams mSessionParams = new PackageInstaller.SessionParams(SessionParams.MODE_FULL_INSTALL);
mSessionParams.setReferrerUri(Uri.parse("file:///mnt/sdcard/Download/Facebook.apk"));
int mSessionId = mPackageInstaller.createSession( mSessionParams );
PackageInstaller.Session mPkgSession = PackageInstaller.openSession(mSessionId);
OutputStream mOStream = mPkgSession.openWrite("com.facebook.katana", 0, -1);
mPkgSession.fsync(mOStream);
我想,我需要启动的下一个函数是“commit(IntentSender statusReceiver)”。
所以请告诉我如何使用 commit(),尤其是如何声明一个正确的 IntentSender 来安装存储在/sdcard 中的 APK。
谢谢!!
最佳答案
这在 Android 6.0 及更高版本中是可能的。
一旦您的应用获得设备所有者权限,我们就可以静默安装、卸载和更新,无需任何用户干预。
public static boolean installPackage(Context context, InputStream in, String packageName)
throws IOException {
PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
// set params
int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
OutputStream out = session.openWrite("COSU", 0, -1);
byte[] buffer = new byte[65536];
int c;
while ((c = in.read(buffer)) != -1) {
out.write(buffer, 0, c);
}
session.fsync(out);
in.close();
out.close();
session.commit(createIntentSender(context, sessionId));
return true;
}
卸载:
String appPackage = "com.your.app.package";
Intent intent = new Intent(getActivity(), getActivity().getClass());
PendingIntent sender = PendingIntent.getActivity(getActivity(), 0, intent, 0);
PackageInstaller mPackageInstaller = getActivity().getPackageManager().getPackageInstaller();
mPackageInstaller.uninstall(appPackage, sender.getIntentSender());
关于Android Lollipop - PackageInstaller.Session commit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608339/
查看 Android (AOSP) 的源代码,installPackage标记为已弃用并检查 Android 的 PackageManager 应用程序,它使用 PackageInstaller创建一
我正在开发一个以设备所有者身份运行的应用程序,我想在其中构建一个自动更新程序。 为此,我使用了 PackageInstaller,因为我的设备所有者职位使我有权使用它。 private void in
您好 StackOverflow 用户, 我在 Play 商店之外有一个 Android 应用程序。它通过下载新的 APK 并使用 Intent 调用安装程序对话框来更新自身。更新功能不再适用于 An
我在 this 之后有一个名为 CosuUtils 的类类非常接近。我正在以编程方式更新作为设备所有者的应用程序。这在 Android 6 中运行良好,但在 Android 7 中尝试更新时出现以下错
编辑:我添加了 API 级别 29 或更高版本的解决方案。但是,这并不能解决我的问题。 如果有人提出 API 级别 28 或更早的方法,我将不胜感激。 原始问题: 我正在使用以下代码安装 apk: f
我使用 PackageInstaller API 来安装我的 apk。我可以获得 Android PackageInstaller 取消按钮回调吗?如果是,我该怎么办?或者根本不可能。 最佳答案 如果
我的应用程序具有设备管理员权限,但我无法使用 packageinstaller 卸载该应用程序。当我的代码运行时,它还没有抛出任何错误,我尝试卸载的应用程序仍保留在那里。知道可能出什么问题吗?或者如何
我正在尝试仅通过使用 PackageInstaller 和 PackageManager API 在我的设备上安装包(从在其上运行的设备所有者应用程序)。我一直在寻找示例,但找不到适合我需要的任何内容
我在 google play 上发布了一个 android 应用程序。 我过去遇到过一些黑客和盗版问题[反编译的人修改并重新编译应用程序然后将其发布在某个地方] 为了减少问题,我采取的其中一项措施是中
PackageInstaller 成功(自行)更新应用程序后,应用程序将关闭并且不再启动。 可能重复:Android PackageInstaller, re-open the app after i
我生成了我的应用APK文件。 现在,当我试图通过我的设备打开它时,我得到了: 5474-5474/? E/AndroidRuntime﹕ FATAL EXCEPTION: main Proce
作为一些背景知识,我正在 Xamarin 中为一家企业编写一个 Android 应用程序,它应该能够自行更新,而不是通过 Play 商店进行更新。特别是有一种设备无法自行更新,我不明白为什么。 更新的
这是关于托管在 google 代码项目上的包安装程序开源项目的一个非常精确的问题:http://android.amberfog.com/?p=98 当我尝试编译它时,我得到了这个类的 ClassNo
使用 ACTION_UNINSTALL_PACKAGE 卸载 Android 应用程序的旧方法在 API 级别 29 中已弃用。现在建议使用 PackageInstaller.uninstall(pa
我只是尝试测试一个简单的应用程序,它获取设备的位置并将其打印在 TextView 上,我在 Android Studio 上使用 Record Espresso Test 选项,我测试了运行时权限请求
是否可以在不使用 packageInstaller 的情况下知道是否从 Play 商店安装了 Android 应用程序?每个其他问题都与任何人都可以编辑的 packageInstaller 有关,但我
我最近开始使用 Android Studio 而不是 Eclipse。我使用 Android Studio 将 Eclipse 项目导入并迁移到 Android Studio 中。如果我使用 AS 构
我正在使用 selenium Appium 自动化应用程序 Selenium 更高版本 Appium 1.9.1 每当应用程序启动时,总是弹出权限,显示成功,我可以使用自动化点击权限,但在授予权限
请检查下面的类并给我有关如何使用它们的建议 https://developer.android.com/reference/android/content/pm/PackageInstaller.ht
我正在尝试使用 Xamarin android 编写概念验证代码。一种 EMM 工具,即负责安装其他应用程序和管理设备的应用程序。所以 Android Marshmallow 是开始使用 androi
我是一名优秀的程序员,十分优秀!