我有一个监听推送消息的后台函数。我需要处理推。我创建了在推送到达时采取任何操作的功能,并且效果很好。例如,当推送到达时,我会增加一个数字等等。
但是,当用户按下“确定”按钮进行推送时,实际启动应用程序的代码是什么?
我只需要让应用程序正常启动,就像用户刚刚按下应用程序的图标一样。
I am using OS < 7.X
最佳答案
一种典型的模式是构建具有两个入口点 的应用程序。也就是说,它可以以两种不同的方式启动。一种方法是使用普通的 UiApplication
。这是标准的 BlackBerry 应用程序,可以通过按主屏幕图标启动。
另一种方法是定义一个处理推送通知的后台服务,并在设备启动时由操作系统启动。
您将通过在应用程序的 BlackBerry_App_Descriptor.xml 文件中添加一个备用入口点 来定义后台/推送入口点。确保选中启动时自动运行和不显示应用程序图标...。除了 UiApplication 的正常入口点之外,您的应用程序描述符 xml 文件还应包含如下内容:
<AlternateEntryPoints>
<AlternateEntryPoint Title="PushService" MainMIDletName=""
ArgumentsForMain="-push" HomeScreenPosition="0"
StartupTier="7" IsSystemModule="true"
IsAutostartup="true" hasTitleResource="false"
TitleResourceBundleKey="" TitleResourceBundleName=""
TitleResourceBundleClassName="" TitleResourceBundleRelativePath="">
<Icons/>
<KeywordResources KeywordResourceBundleName="" KeywordResourceBundleRelativePath="" KeywordResourceBundleClassName="" KeywordResourceBundleKey=""/>
</AlternateEntryPoint>
</AlternateEntryPoints>
然后,你将有一个像这样的主程序:
public class MyApp extends UiApplication
public static void main(String[] args) {
if (args.length > 0 && args[0].equals("-push")) {
// this is the push service
PushAgent pa = new PushAgent();
pa.enterEventDispatcher();
} else {
// UiApplication
MyApp app = new MyApp();
app.enterEventDispatcher();
}
}
}
其中 PushAgent
是一个扩展 Application
的类,而不是 UiApplication
。
然后,当您的推送代理收到通知并且您决定要显示 UI 时,使用如下内容:
ApplicationDescriptor ad = ApplicationDescriptor.currentApplicationDescriptor();
// String[] used for command line args, but we don't pass any to the UI app
ApplicationDescriptor ui = new ApplicationDescriptor(ad, new String[] { });
ApplicationManager.getApplicationManager().runApplication(ui);
关于blackberry - 如何通过代码启动黑莓应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041626/