0

在我的聊天应用程序中,我希望当此人不在聊天屏幕上时,他应该收到通知,而当此人不在聊天屏幕上时,他不应该收到任何通知(聊天应该简单地显示在聊天屏幕上)。

当这个人在聊天屏幕上时,我强行改变用户的状态并广播它。现在这里的问题是,当用户现在将收到任何消息/聊天时,用户设备上运行的服务将如何决定移动用户本身的存在(即他是否在聊天屏幕上)。我认为不可能让用户本身出现(在名册的帮助下,因为用户本身没有在他的名册中列出)

这个函数写在我的服务类中

PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
        final PacketCollector collector = connection.createPacketCollector(filter);
        connection.addPacketListener(new PacketListener() {

            @Override
            public void processPacket(Packet packet) {
                // TODO Auto-generated method stub
                //notification(packet.getFrom());
                packet = collector.nextResult();
                Message message = (Message)packet;
                senderName = packet.getFrom();

                int alphaPOS = senderName.indexOf("@");
                String subSenderName = senderName.substring(0,alphaPOS); 



                notificationforChat(subSenderName+": "+message.getBody(),packet.getFrom().toString());

            }
        }, filter);

现在当用户在聊天屏幕上时如何停止通知???

请帮我

4

2 回答 2

1

在您的活动中编写此方法。

        public static boolean isVisible = false;
        @Override
        public void onWindowFocusChanged(boolean hasFocus) {
            // TODO Auto-generated method stub
            super.onWindowFocusChanged(hasFocus);
            if(hasFocus)
            {
                   isVisible = true;
            }
            else
            {
                   isVisible = false;
            }
        }

以及您希望在哪里使用此布尔值来检查屏幕是否可见。

于 2012-11-02T06:11:10.403 回答
1

您的聊天屏幕是否嵌入在 Android 活动中?如果是这样,您可以覆盖 Activity 的 onResume() 和 onPause() 方法来设置某种标志,以便您的服务现在可以在 Activity 处于活动状态(当用户使用它时)或它不可见时. 一种方法是使用共享首选项。这是一个简化的大纲:

@Override
public void onResume() {
  setUserPresence(true);
  super.onResume();
}

@Override
public void onPause() {
  setUserPresence(false);
  super.onResume()
}

public void setUserPresence(boolean state) {
  SharedPreferences prefs = getSharedPreferences("settings_file_name",MODE_PRIVATE);
  SharedPreferences.Editor editor = prefs.edit();
  editor.putBoolean("UserPresent", state);
  editor.commit(); //Save your settings to the shared preferences file
}

然后你需要做的就是在你的服务中检查这个标志,使用相同的 SharedPreferences 方法。

于 2012-11-02T06:12:13.900 回答