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() メソッドをオーバーライドして何らかのフラグを設定し、アクティビティがアクティブな場合 (ユーザーが使用している場合) または表示されていない場合にサービスが動作するようにすることができます。 . これを行う 1 つの方法は、共有設定を使用することです。簡単な概要は次のとおりです。

@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 に答える