我正在编写一个要求用户设置设备密码的应用。该公司向其员工分发黑莓设备,然后将其用于报告销售等。公司希望确保设备密码设置,以便任何人在窃取手机时都无法轻易访问机密信息。如果没有设置密码,应用程序必须无法运行,这很容易。
该公司想要显示一条消息“请设置设备密码”,然后将用户引导至设备选项菜单,以显示设置设备密码的位置。这样做似乎很麻烦
我查看了ApplicationManager
对象,它允许您将应用程序带到前台。但是,当我使用以下代码查看可用的应用程序时:
ApplicationManager manager = ApplicationManager.getApplicationManager();
ApplicationDescriptor descriptors[] = manager.getVisibleApplications();
for(int i=0;i<descriptors.length;i++)
{
String applicationName= descriptors[i].getName();
System.out.println("applicationName");
}
唯一可见的应用程序是电话,消息,黑莓消息,主屏幕等,但选项应用程序不存在,这让我相信它不能从这里访问。 (如果我错了请告诉我)
我还看了一下Invoke.invokeApplication(appType, args)
方法,但API没有选项或设置等的appType常量.API仅指定以下类型,我找不到我需要的那个:
APP_TYPE_ADDRESSBOOK
APP_TYPE_BLUETOOTH_CONFIG
APP_TYPE_CALCULATOR
APP_TYPE_CALENDAR
APP_TYPE_CAMERA
APP_TYPE_MAPS
APP_TYPE_MEMOPAD
APP_TYPE_MESSAGES
APP_TYPE_PHONE
APP_TYPE_SEARCH
APP_TYPE_TASKS
我已经扫描了API文档,但找不到任何看起来正确的内容。我搜索了设备和选项和设置,但没有一个匹配。
如果有人知道该怎么做,请告诉我。
答案 0 :(得分:1)
不幸的是,没有标准的API来以编程方式调用此屏幕。但有一个解决方法。使用EventInjector注入一系列键盘事件以打开选项屏幕。
这种方式并不优雅,但我认为这是这种情况下唯一的解决方法。
<强>更新强>
我会实施以下方法。在应用程序启动时,我会通过DeviceInfo.isPasswordEnabled()检查设备是否受密码保护。
如果设备没有密码保护,我会显示消息:设备没有密码保护。请在设备选项中为您的设备设置密码。然后再次启动应用程序。
据我所知,这种方式并不优雅,但它是可靠的,并为客户提供了完整的信息,如何正确使用此应用程序。
答案 1 :(得分:1)
好的,事实证明你可以使用ApplicationManager
运行内部应用程序,所以我使用以下代码启动了选项应用程序:
ApplicationManager.getApplicationManager().launch("net_rim_bb_options_app");
但是,这只会启动“选项”应用,并且不会将用户导航到“安全”部分。
以下模糊from this page帮助我理解了这种方法的真正含义:
启动
可以通过多种方式启动BlackBerry应用程序:
- 由系统自动启动设备启动
- 由另一个应用程序
- 系统在预定时间
无论应用程序如何启动,应用程序管理器都负责启动应用程序将在其中运行的过程。
ApplicationManager类使应用程序能够与Application Manager交互以执行任务,包括:
- 立即或在预定时间运行应用程序
- 与流程交互,包括检索前台应用程序的ID
- 将全局事件发布到系统
入口点
应用程序管理器通过获取新进程并在该进程中生成线程来调用应用程序的其中一个入口点来启动应用程序。对于许多应用程序,其应用程序类的main()方法是被调用的单个入口点。但您可以为应用程序配置多个入口点。
使用多个入口点可让您为用户创建启动应用程序的不同方式。例如,如果您的应用程序允许用户创建新文档,您可能希望为用户提供两个可以单击以启动应用程序的图标。用户可以单击一个图标将应用程序打开到其主屏幕,另一个图标可以将应用程序打开到创建新文档所需的屏幕。
所以基本上这个方法只运行应用程序的main方法,并在main方法中提供参数。我怀疑Options应用程序的主要方法不允许您在main方法中提供要打开的页面作为参数。
没有任何文档(据我所知)选项应用程序采用什么参数,所以没有猜测如何使用它,似乎指导用户在这里并给他们一些如何进一步导航的说明是我唯一的选择
u_u