问题标签 [android-for-work]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 受管理个人资料中的 Android 请勿打扰 (DnD) 权限
我有以下问题:
我的应用程序分布在 MDM 系统上,并在 Android for Work 中运行。在某些情况下,应用程序必须暂时终止 DnD 模式。为此,用户必须在应用启动时授予 DnD 权限。
到现在为止还挺好。如果我在非托管区域安装应用程序,应用程序会显示在列表中,并且可以毫无问题地授予权限。一旦应用程序通过 MDM 系统分发,应用程序将不再出现在列表中,并且无法授予权限。所有授权均已在 MDM 系统中授予。例如,我通过 MDM 系统分发了 Google App。此应用程序出现在列表中。
在清单中,我设置了以下权限:
当应用程序启动时,会执行以下代码:
该问题仅发生在 DnD 权限下。所有其他权限(例如覆盖权限)都可以正常显示。
我希望任何人都可以帮助我。
android - 如何验证 Android DevicePolicyManager#isAdminActive 与未能激活设备管理器的结果
我正面临一个有趣的情况,我不知道如何解决。当用户首次以 Android for Work 用户身份登录我的应用时,我有义务确保该应用已注册为设备管理器。我通过调用检查是否是这种情况DevicePolicyManager#isAdminActive
,如果返回false
,然后我启动一个Intent
withaction=DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN
,以启动将启用设备管理的 Android 控件。一旦发生这种情况,当我的应用程序再次启动时(或从设备管理流程返回时),DevicePolicyManager#isAdminActive
再次检查 的值。如果用户启用了设备管理,那么一切都很好,应用程序会继续运行。
有趣的是,当用户第一次通过我们的流程时,这完全符合预期。不幸的是,重新启动后,当用户启动我的应用程序时,它会检查以确保设备管理仍然处于打开状态,通过DevicePolicyManager#isAdminActive
,这里变得有趣了。DevicePolicyManager#isAdminActive
将报告false
,这是通过查看设备安全设置来验证的。然而,更糟糕的是,尝试启用设备管理将导致以下异常:
W/DeviceAdminAdd:尝试激活管理员时出现异常 ComponentInfo{com.mysoft.myapp/com.mysoft.core.receivers.MyAppAdminReceiver} java.lang.IllegalArgumentException:管理员已添加到 android.os.Parcel.readException(Parcel.java:第 1550 章.java:720) 在 com.android.settings.DeviceAdminAdd.addAndFinish(DeviceAdminAdd.java:346) 在 com.android.settings.DeviceAdminAdd$3.onClick(DeviceAdminAdd.java:313) 在 android.view.View.performClick(View .java:5242) 在 android.widget.TextView.performClick(TextView.java:10571) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.view.View$PerformClick.run(View.java:21196) 在android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:6938) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang.reflect。 Method.invoke(Method.java:372) 在...在 java.lang.reflect.Method.invoke(Method.java:372) 在 ...在 java.lang.reflect.Method.invoke(Method.java:372) 在 ...
即使我尝试通过系统安全设置页面手动启用设备管理,这个确切的异常也会出现在我的 logcat 控制台上,所以我不认为原来的Intent
文件格式不正确。
所以,这是我的问题:对 Android 设备管理 API 的一次调用告诉我我的设备管理员未激活,但对同一 API 的另一次调用告诉我它是。我相信第二个实际上是错误的,但是由于无法激活管理,我的用户陷入了循环并且无法使用我的应用程序。
有没有其他人遇到过这个错误,如果是这样,你如何围绕它编写代码?
android - 配置设备所有者和 CosuApp
我设置了一个设备所有者应用程序配置应用程序,如 google 示例NFC 配置中所示,具有额外的设置功能EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION
和EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
. 我希望如Google I/O 2016的视频所示,提供设备所有者应用程序和 cosu 应用程序。我怎样才能实现这个目标?
我应该设置一个既是 cosu 又是设备所有者的应用程序,或者我必须通过配置应用程序通过 nfc 自动提供下载位置并指示我的设备所有者下载并安装特定的应用程序?
android - 查询不同配置文件的意图活动:Android for Work
由于某些技术原因,我无法使用Android File Picker将文件及其内容获取到我的应用程序中。这就是为什么我想出了一个在我自己的 UI 上查询意图并处理结果的解决方案。
这是我获取应用程序列表的方法Intent.ACTION_GET_CONTENT
这可以正常工作并列出可以处理我的请求的应用程序。
但是我正在使用Android for Work ,当我执行上面的代码时,我只得到了Work Profile可用的应用程序列表,这是预期的。
但是从上面的代码返回的结果之一是“切换到个人”,它列出了安装在Android File Picker的个人帐户中的应用程序。
所以问题是,我怎样才能获得相同的行为?如何从个人资料中查询意图活动?
android - 是否可以使用 Espresso 来测试带有 AndroidForWork 工作配置文件的应用程序
我想通过 Espresso 测试 MyApp。MyApp 可以进行 AndroidForWork 注册。注册后设备上会有2个MyApps:一个是个人资料,另一个是工作资料,如下所示:(我只是以下载应用程序为例。) 带有个人资料和工作资料的应用程序
我的问题:是否可以使用 espresso 来测试个人和工作资料应用程序?如果是怎么办?
我要测试的内容:
- 启动 MyApp(带有个人资料,还没有 MyApp 的工作资料)。-- 浓缩咖啡效果很好。
- 做 AndroidForWork 注册——Espresso 工作正常,然后生成带有工作配置文件的 MyApp。
- 使用工作配置文件启动 MyApp 并对其进行测试。——我不知道该怎么做。My Espresso 只启动了带有个人资料的 MyApp。两个 MyApps(带有个人或工作资料)具有完全相同的包名称。
顺便说一句,我尝试 UIAutomator 使用工作配置文件测试 MyApp,但 MyApp 有一些网页,UIAutomator 无法识别其中的 Web 元素。这就是为什么我仍然想使用 Espresso 来测试带有工作配置文件的 MyApp。
android - 检查是否已有工作资料、谁拥有它以及它是否处于活动状态
我需要的东西感觉相当简单,而且令人沮丧的是,Android for Work API 似乎没有提供开箱即用的功能。
我正在尝试创建一个Android DPC应用来拥有和管理工作资料。(不是设备所有者)。配置工作配置文件时,您会获得两个应用程序实例。一个标记在工作配置文件下运行,另一个未标记在主要配置文件下运行。
我试图找出三件事:
- 设备上是否已配置工作配置文件?
- 如果是这样,是我的应用程序拥有个人资料吗?如果不是,哪个应用程序可以?
- 工作资料是否处于活动状态?
原因是,即使在 Google 自己的示例应用程序(见图)中,它也不会尝试建立它并启动配置,即使已经存在工作配置文件并且应用程序实际上是所有者!
android - 企业内部的管理 API 和应用程序分发
我正在使用 Android Management API 将多个设备变成票务应用程序的信息亭。我能够创建一个企业,注册几个设备,手动安装应用程序并通过策略控制它。它工作得很好。
现在我想将我的应用发布到 Play 商店,并且我希望它仅可用于注册到该企业的设备。正如这里所建议的,我在定价和分发 > 用户程序 > 托管 Google Play中将应用程序限制为我的企业并发布了我的应用程序。然后我将我的应用程序添加到 Android Management API 策略以获取自动更新。但是该应用程序在这些设备上仍然不可见,并且不会更新。当我将策略中的包名称更改为某个现有应用程序时,设备正在尝试下载它。所以这似乎是我在商店中的应用程序的问题。
我错过了什么吗?还有其他解决私有/企业分发的 Google API:Android EMM Developers或Custom App Publishing API,但没有信息说明这些 API 如何协同工作,如果我使用 Android Management API,是否仍需要注册到 EMM?我认为它应该简化这个过程,但我有点困惑。
还要提一下,企业主和店主是同一个账号。
android - Ssl 握手在企业 Android 上失败,但在普通设备上运行良好
我在与企业设备建立 SSL 连接时遇到了问题。当我在普通的 android 设备上运行我的应用程序时,SSL 握手会成功。我不知道为什么会发生这种情况,代码应该适用于这两种设备。
这是我选择证书和提取别名私有和证书链的代码:
现在用 OkHttpClient 绑定它:
此代码适用于普通设备,但不适用于企业设备。
如果我需要为企业设备做点什么,请告诉我。
问候
java - 有没有办法通过意图从 Android For Work 应用程序启动个人浏览器?
我安装了 Android for Work 应用程序,我想打开浏览器。使用经典意图的方式工作,但在工作空间中打开浏览器。
由于一些网络问题,我需要使用个人浏览器。有没有办法告诉意图启动个人浏览器而不是工作空间浏览器?
android - 粘性广播在 Android 中提供安全异常以在 Android P 中工作
我在我的应用程序中使用粘性广播,并且我在清单中包含了以下权限。
该应用程序在个人资料中正常安装时运行良好。由于安全异常,仅在工作配置文件中安装的同一应用程序崩溃。如果该应用程序同时安装在工作资料和个人资料中,则它在两个资料中都可以正常工作。
- 只有个人资料:工作正常
- 个人资料和工作资料:工作正常
- 仅工作资料:崩溃
崩溃只发生在 Android Pie 中。
给出异常的 API 是 context.removeStickyBroadcast()