在没有用户交互和root权限的情况下静默更新android应用程序时出现问题

在没有用户交互和root权限的情况下静默更新android应用程序时出现问题,android,auto-update,silent-installer,packageinstaller,Android,Auto Update,Silent Installer,Packageinstaller,我知道有很多关于这个问题的堆栈溢出帖子,但我无法使用它们中的任何一个来解决我的问题。 我的应用程序仅适用于有限的人群(公司内部应用程序),因此我无法在应用程序商店中发布它,我希望在应用程序服务器上发布新版本时自动更新它。 它是一个设备管理员应用程序,没有root权限。我找到了实现这一目标的方法,但没有成功。 我在我的AndroidManifest.xml文件中有此权限安装软件包: <uses-permission android:name="android.permission.IN

我知道有很多关于这个问题的堆栈溢出帖子,但我无法使用它们中的任何一个来解决我的问题。
我的应用程序仅适用于有限的人群(公司内部应用程序),因此我无法在应用程序商店中发布它,我希望在应用程序服务器上发布新版本时自动更新它。
它是一个
设备管理员
应用程序,没有root权限。我找到了实现这一目标的方法,但没有成功。

我在我的
AndroidManifest.xml
文件中有此权限安装软件包:

   <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
这是我的
MainActivity
类的
onCreate
方法:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    ComponentName componentName = new ComponentName(this, AdminReceiver.class);
    DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
    if (getIntent() != null && dpm != null)
    {
        Log.d(TAG, "onCreate: is app admin : " + dpm.isAdminActive(componentName));
        Log.d(TAG, "onCreate: status : " + getIntent().getIntExtra("android.content.pm.extra.STATUS", 1000));
        Log.d(TAG, "onCreate: intent : " + getIntent().getParcelableExtra("android.intent.extra.INTENT"));
    }
}
这是我的
logcat
结果:

2019-07-08 15:03:24.147 5841-5841/com.test.learncheshmak D/AutoUpdateHelper: downloadUpdate: SUCCESSFUL
2019-07-08 15:03:24.147 5841-5841/com.test.learncheshmak D/AutoUpdateHelper: installPackage: start
2019-07-08 15:03:24.295 5841-5841/com.test.learncheshmak D/AutoUpdateHelper: installPackage: commit
2019-07-08 15:03:24.298 5841-5895/com.test.learncheshmak V/FA: Recording user engagement, ms: 11740
2019-07-08 15:03:24.302 5841-5841/com.test.learncheshmak W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@fe51cb8
2019-07-08 15:03:24.307 5841-5841/com.test.learncheshmak V/FA: onActivityCreated
2019-07-08 15:03:24.308 5841-5895/com.test.learncheshmak V/FA: Connecting to remote service
2019-07-08 15:03:24.308 5841-5841/com.test.learncheshmak D/MainActivity: onCreate: is app admin : true
2019-07-08 15:03:24.309 5841-5841/com.test.learncheshmak D/MainActivity: onCreate: status : -1
2019-07-08 15:03:24.309 5841-5841/com.test.learncheshmak D/MainActivity: onCreate: intent : Intent { act=android.content.pm.action.CONFIRM_PERMISSIONS pkg=com.google.android.packageinstaller (has extras) }
在这里,我们看到,状态是-1。根据我获得的文档
STATUS\u PENDING\u USER\u ACTION
,它确定我们需要用户提示来更新我们的应用程序。但此应用程序是一个设备管理员(设备所有者)应用程序,根据文档:

提交可能需要用户干预才能完成安装,除非调用方属于以下类别之一,在这种情况下,安装将自动完成

  • 设备所有者
  • 附属档案所有者

因此,如果应用程序是
设备所有者
安装进度将自动执行(无需用户提示)。那么,当我的应用程序是一个
设备管理员
应用程序时,为什么我会得到
状态\u挂起\u用户\u操作

我也面临这个问题,但只针对API 21。对于更高版本,它可以正常工作。
2019-07-08 15:03:24.147 5841-5841/com.test.learncheshmak D/AutoUpdateHelper: downloadUpdate: SUCCESSFUL
2019-07-08 15:03:24.147 5841-5841/com.test.learncheshmak D/AutoUpdateHelper: installPackage: start
2019-07-08 15:03:24.295 5841-5841/com.test.learncheshmak D/AutoUpdateHelper: installPackage: commit
2019-07-08 15:03:24.298 5841-5895/com.test.learncheshmak V/FA: Recording user engagement, ms: 11740
2019-07-08 15:03:24.302 5841-5841/com.test.learncheshmak W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@fe51cb8
2019-07-08 15:03:24.307 5841-5841/com.test.learncheshmak V/FA: onActivityCreated
2019-07-08 15:03:24.308 5841-5895/com.test.learncheshmak V/FA: Connecting to remote service
2019-07-08 15:03:24.308 5841-5841/com.test.learncheshmak D/MainActivity: onCreate: is app admin : true
2019-07-08 15:03:24.309 5841-5841/com.test.learncheshmak D/MainActivity: onCreate: status : -1
2019-07-08 15:03:24.309 5841-5841/com.test.learncheshmak D/MainActivity: onCreate: intent : Intent { act=android.content.pm.action.CONFIRM_PERMISSIONS pkg=com.google.android.packageinstaller (has extras) }