2012-11-02 2 views
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); 

이제 내 서비스 클래스로 작성 (사용자 자체가 자신의 명부에 표시되지 않는 명부의 도움으로)가 사용자 자신의 존재를 얻을 수 없습니다 생각 사용자가 채팅 화면에있을 때 알림을 중지하는 방법 ???

도와주세요.

답변

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; 
      } 
     } 

이 불린을 사용하여 화면이 보이는지 여부를 확인하십시오.

1

채팅 화면이 Android 용 활동에 포함되어 있습니까? 그렇다면 Activity의 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 
} 

을 그리고 당신이 할 필요가 동일한 된 SharedPreferences 접근 방식을 사용하여 서비스에이 플래그를 확인할 수 있습니다 : 여기에 간단한 개요입니다.