Android 知道用户本身的存在
在我的聊天应用程序中,我希望当该人不在聊天屏幕上时,他应该收到通知,当该人不在聊天屏幕上时,他不应该收到任何通知(聊天应该简单地显示在聊天屏幕上) 当该用户出现在聊天屏幕上时,我会强制更改该用户的状态并进行广播。现在这里的问题是,当用户现在将收到任何消息/聊天时,用户设备上运行的服务将如何决定移动用户本身的存在(即他是否在聊天屏幕上)。我认为不可能让用户自己在场(在花名册的帮助下,因为用户本身不在花名册中) 此函数是在我的服务类中编写的Android 知道用户本身的存在,android,xmpp,user-presence,Android,Xmpp,User Presence,在我的聊天应用程序中,我希望当该人不在聊天屏幕上时,他应该收到通知,当该人不在聊天屏幕上时,他不应该收到任何通知(聊天应该简单地显示在聊天屏幕上) 当该用户出现在聊天屏幕上时,我会强制更改该用户的状态并进行广播。现在这里的问题是,当用户现在将收到任何消息/聊天时,用户设备上运行的服务将如何决定移动用户本身的存在(即他是否在聊天屏幕上)。我认为不可能让用户自己在场(在花名册的帮助下,因为用户本身不在花名册中) 此函数是在我的服务类中编写的 PacketFilter filter = new Mes
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);
现在,当用户在聊天屏幕上时,如何停止通知
请在您的活动中帮助我写下此方法
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;
}
}
无论您想在何处使用此布尔值来检查屏幕是否可见。您的聊天屏幕是否嵌入到android活动中?如果是这样,您可以覆盖活动的onResume()和onPause()方法,以设置某种标志,这样,如果活动处于活动状态(当用户正在使用它时)或不可见,您的服务将立即启动。一种方法是使用共享首选项。以下是一个简化的大纲:
@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
}
然后,您需要做的就是使用相同的SharedReferences方法在服务中检查这个标志