Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设备所有者Android应用程序的OTA更新(信息亭模式)_Android_Nfc_Updates_Kiosk Mode_Device Owner - Fatal编程技术网

设备所有者Android应用程序的OTA更新(信息亭模式)

设备所有者Android应用程序的OTA更新(信息亭模式),android,nfc,updates,kiosk-mode,device-owner,Android,Nfc,Updates,Kiosk Mode,Device Owner,如前所述,我可以通过NFC制作我的应用程序,即设备所有者应用程序。现在我想通过“空中传送”更新我的应用程序,但我找不到一个没有根的方法 如前所述,谷歌为企业开发应用程序提供了许多选择,但没有提供通过OTA更新应用程序的方法 正在寻找解决方案。创建一个用于后台检查更新的服务。如果更新可用,下载apk文件并将其写在SD卡上。等待几秒钟以完全刷新写入。然后调用以下代码安装新的apk Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDa

如前所述,我可以通过NFC制作我的应用程序,即设备所有者应用程序。现在我想通过“空中传送”更新我的应用程序,但我找不到一个没有根的方法

如前所述,谷歌为企业开发应用程序提供了许多选择,但没有提供通过OTA更新应用程序的方法


正在寻找解决方案。

创建一个用于后台检查更新的服务。如果更新可用,下载apk文件并将其写在SD卡上。等待几秒钟以完全刷新写入。然后调用以下代码安装新的apk

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
startActivity(intent);

fileName
是sd卡上新apk文件的路径。

您可以使用Play Store为应用程序提供更新:

  • 通过NFC提供设备所有者应用程序,就像您已经做的一样

  • 在Play Store上提供设备所有者应用程序的更新版本(相同的软件包名称、相同的签名、更高的版本号)

  • 在设备上的Play Store应用程序中,搜索应用程序的Play Store版本并安装更新

  • 在Play Store中激活设备所有者应用程序的自动更新(在应用程序的Play Store页面上,单击菜单(三个点),然后激活自动更新复选框


  • 这对于资源调配阶段来说是一项相当大的工作,但是设备将来应该会自动接收更新。

    这纯粹是猜测,因为我自己从来没有尝试过使用软件包安装程序API:

    您可以尝试为设备所有者应用设置安装程序包(使用
    PackageManager.setInstallerPackageName()
    )。此安装程序包需要是一个单独的APK,并使用与设备所有者APK相同的证书签名

    getPackageManager().setInstallerPackage("<device.owner.package.name>", "<installer.package.name>");
    

    我不确定这是否会以静默方式安装您的更新(或者是否以我预期的方式工作).

    我想你可能想成为EMM/MDM合作伙伴应用程序。它类似于设备所有者应用程序,但具有增强的权限和api。通常,三星/HTC等原始设备制造商为MDM合作伙伴应用程序提供隐藏的api以升级应用程序。我不确定Android for Work是否也提供此api


    例如:OEM提供了一个名为updatePackage(String packageName)的api,设备上的MDM客户端可以使用该api更新包。您也可以使用该api更新设备所有者应用程序。

    Evolve()可能会有帮助。我已经看到了,但无法使用它,而且它处于alpha阶段,这可能会导致我们的应用程序崩溃。它似乎在运行时更改代码,所以看起来有点复杂。@Shubham,你让它工作了吗?@Maragues 2年前,没有支持,我不是abe做的。@Shubham非常感谢,这就是为什么我想的原因。不幸的是,我的client仍然有很多4.4.2设备:(我希望以静默方式进行安装。您的方法不会以静默方式安装apk。这将打开安装UI,并且必须签入设置“允许从未知源进行安装”谢谢你的回答。我也想到了同样的问题,但这需要在我避免使用的设备上设置gmail帐户,因为该应用程序是针对KIOSK模式的。@Shubham如果你尝试这种方法,我非常乐意得到反馈,如果这能如我所料(或者如果不是你遇到的问题)。我无法尝试您的答案,但对Package Installer进行了更多的研究,发现提交会话需要root权限。我仍将很快尝试并向您提供反馈。
    PackageInstaller pi = getPackageManager().getPackageInstaller();
    int sessId = pi.createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL));
    PackageInstaller.Session session = pi.openSession(sessId);
    OutputStream out = session.openWrite("app");
    // .. write updated APK file to out
    session.fsync(out);
    session.commit(...);
    session.close();