2013-10-09 90 views
1

应用详细信息:

我正在编写一个需要用户设置设备密码的应用程序。该公司向其员工分发黑莓设备,然后他们会使用这些设备报告销售情况等。公司希望确保设备密码已设置好,以便任何人窃取机密信息都不容易被任何人窃取。如果没有设置密码,该应用程序不能工作,这很容易。编程打开黑莓设备选项

问题:

该公司希望来消息了说“请设置设备密码”,然后将用户引导到设备的选项菜单,以显示他们在哪里设置的设备密码。这样做似乎麻烦

我迄今为止尝试:

我特地到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文档,我无法找到任何看起来合适的。我搜索了设备和选项和设置,但没有任何匹配是相关的。

如果有人知道该怎么办,那就让我知道。

回答

1

好了,所以事实证明,你可以运行使用ApplicationManager内部应用程序,所以我使用下面的代码启动选项应用:

ApplicationManager.getApplicationManager().launch("net_rim_bb_options_app"); 

然而,这只是启动选项的应用程序,并且不浏览用户转到安全部分。

下面的Blurb from this page帮助我了解这个方法确实:

开始

一个黑莓应用程序可以通过多种方式启动:

  • 由系统自动在设备启动时
  • 由另一个应用程序
  • 系统在预定时间

无论应用程序如何启动,应用程序管理器都负责启动应用程序将在其中运行的过程。

的ApplicationManager类可让应用程序与应用程序管理器交互,以执行任务,包括:

  • 运行的应用程序会立即或在预定的时间
  • 与进程交互,包括检索的ID为前台应用程序
  • 后全局事件给系统

切入点

应用程序管理器通过获取新进程并在该进程内产生一个线程来调用应用程序的入口点来启动应用程序。对于许多应用程序,其应用程序类的main()方法是被调用的单个入口点。但是,您可以为应用程序配置多个入口点。

使用多个入口点可让您为用户创建不同的方式来启动应用程序。例如,如果您的应用程序允许用户创建新文档,则可能需要为用户提供两个可单击以启动该应用程序的图标。用户可以单击一个图标将应用程序打开到其主屏幕,另一个图标将应用程序打开到创建新文档所需的屏幕。


摘要

所以基本上,这种方法只运行应用程序的主要方法,并在main方法提供的参数。我怀疑Options应用程序的主要方法不允许您提供您想要打开的页面作为主方法中的参数。

没有任何文档(据我可以告诉)应用程序需要什么参数,所以很少猜测它如何使用,似乎指示用户在这里,并给他们一些指导如何浏览进一步是我唯一的选择

u_u

1

不幸的是,没有标准的API来以编程方式调用此屏幕。但是有一个解决方法。使用EventInjector注入一系列键盘事件以打开选项屏幕。

这种方式并不优雅,但我认为这是唯一的解决方法。

UPDATE:

我将实现以下方法。在应用程序启动时,我会检查设备是否通过DeviceInfo.isPasswordEnabled()进行密码保护。

如果设备没有密码保护,我会显示消息:设备没有密码保护。请在设备选项中为您的设备设置密码。然后再次启动应用程序。

我明白了,这种方式并不优雅,但它是可靠的,并向客户提供完整的信息,如何正确使用这个应用程序。

+0

是的我猜maaaybe可以工作。有点。有一个问题,我将不得不为每个操作系统版本做不同的事情,因为我相信菜单已经改变。此外,我不确定这将如何工作,因为我不知道如何在那里浏览,通过随机应用程序的人可能有。 –

+0

@JasonRidge不幸的是,没有可靠的方法来做到这一点。我已经更新了我的答案,请检查更新。 – 2013-10-10 17:31:19