没有在JMS监听器非活动类android中获取应用程序上下文

时间:2014-12-30 05:53:22

标签: java android jms android-notifications

我是Android的新手,我现在正在使用jms主题在Android中收到消息我想生成该消息的通知,例如当收到消息时会出现通知。为了生成通知,我需要应用程序的上下文,我尝试了不同的方法,但现在没有工作,如何在消息监听器中获取上下文。我的监听器实现和通知功能

消息侦听器

    private class DestinationMessageListener implements MessageListener {

    public void onMessage(Message message) {
        try {
            if (message instanceof TextMessage) {

                System.out.println(message);
                Context ctx = getApplicationContext();
                sendNotification("Helo","title",1,"test");

            } catch (Exception ex) {
            ex.printStackTrace();
            //logMessage("EXCEPTION: " + ex.getMessage());
        }
    }

通知类

public void sendNotification(String title, String msg, int msgId, String badge,Context ctx) {
    mNotificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent tabsIntent = new Intent(ctx, TabsFragmentActivity_.class);
    tabsIntent.putExtra("GO_TO_MESSAGES", true);
    tabsIntent.putExtra("MSG_ID", msgId);
    tabsIntent.putExtra(TabsFragmentActivity.BADGE_KEY, badge);
    PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, tabsIntent, PendingIntent.FLAG_ONE_SHOT);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx);

    mNotificationManager.notify(msgId, mBuilder.build());

}

注意: 我没有在消息监听器实现中接收上下文,这个类是一个非活动类。我正在使用android注释框架。

1 个答案:

答案 0 :(得分:1)

@Awais:你必须将上下文传递给非活动/接收者/服务类。您还可以使用其他选项,例如在应用程序包中定义应用程序类,通过此应用程序包,您可以拥有应用程序上下文。 在Android Manifest文件中声明如下

<application android:name="com.xyz.MyApplication">

</application>

然后编写课程

public class MyApplication extends Application{

    private static Context context;

    public void onCreate(){
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApplication.context;
    }
}

私有类DestinationMessageListener实现MessageListener {

public void onMessage(Message message) {
    try {
        if (message instanceof TextMessage) {

            System.out.println(message);
            Context ctx = MyApplication.getAppContext();
            sendNotification("Helo","title",1,"test",ctx);

        } catch (Exception ex) {
        ex.printStackTrace();
        //logMessage("EXCEPTION: " + ex.getMessage());
    }
}