0

一部のアプリケーションでAndroidデバイスに通知を表示しています。通知が発行されるたびに、バンドルは値を保存し、通知をクリックすると、バンドル内のIDで新しいアクティビティが開きます。

ここで、1つの通知がid:Aであると同時に、ユーザーがid:Bで通知を受け取ると、バンドル値が-Bになるという問題が発生します。通知のいずれかがクリックされた場合は、新しい通知値でページが開きます。これは、IDが更新される主な問題です。

通知時に右クリックページを常に開く必要があります

通知の送信

    connection.addPacketListener(new PacketListener() {

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

                // new code
                mMessageItem = new MessageItemDataClass();
                mMessageItem.isSendMessage = false;
                mMessageItem.messageText = message.getBody();

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



                refinedID = refineFromjId(packet.getFrom());

                Random rand = new Random();
                int randNotificationVal = rand.nextInt(1000);
                String notificationID = ""+randNotificationVal;

                while(idMap.containsValue(notificationID)){

                    randNotificationVal = rand.nextInt(1000);
                    notificationID = ""+randNotificationVal;

                }


                if(!idMap.containsKey(refinedID)){

                    saveNotificationID(refinedID, notificationID);
                }

                if (UserChatActivity.checkPresence == true) {

                    if (packet.getFrom().equalsIgnoreCase(
                            refineFromjId(UserChatActivity.frienduserID)
                                    + "/Smack")) {

                        UserChatActivity.messages.add(mMessageItem);
                    } else {
                        notificationforChat(
                                subSenderName + ": " + message.getBody(),
                                packet.getFrom().toString(), Integer.parseInt(idMap.get(refinedID))
);
                    }
                } else {
                    notificationforChat(
                            subSenderName + ": " + message.getBody(), packet
                                    .getFrom().toString(),  Integer.parseInt(idMap.get(refinedID))
);

            }



public void notificationforChat(CharSequence message, String toJid,
            int notificationID) {

        int notificationCount = 1;
        String ns = Context.NOTIFICATION_SERVICE;
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
        int icon = R.drawable.ic_launcher;
        CharSequence tickerText = message;
        long when = System.currentTimeMillis();
        Notification notification = new Notification(icon, tickerText, when);
        //notification.number = notificationCount++;
        Context context = getApplicationContext();

        CharSequence contentTitle = "Chat";
        CharSequence contentText = message;
        Intent notificationIntentforChat = new Intent(this,
                UserChatActivity.class);
        notificationIntentforChat.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_NEW_TASK);

        notificationIntentforChat.putExtra("userNameVal", toJid);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                notificationIntentforChat, PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setLatestEventInfo(context, contentTitle, contentText,
                contentIntent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.defaults = Notification.DEFAULT_ALL;
        mNotificationManager.notify(notificationID, notification);
    }

バンドルがチェックされるUserChatActivity

try {
            Bundle bundle = getIntent().getExtras();
            if (bundle.getString("userNameVal") != null) {
                frienduserID = bundle.getString("userNameVal");         
                int index_of_Alpha = frienduserID.indexOf("@");
                String subID = frienduserID.substring(0, index_of_Alpha);
                mtvChatTitle.setText(subID);
                //System.out.println("TRY == "+frienduserID);
            }
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            //System.out.println(""+frienduserID);
        }

ありがとう

4

2 に答える 2

1

私は解決策を見つけました、

このライブラリをダウンロードしてプロジェクトを追加し、

https://github.com/JakeWharton/NotificationCompat2/downloads

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.example.notification.R.id;
import com.jakewharton.notificationcompat2.NotificationCompat2;

public class MainActivity extends Activity {
    Button btn;
    int i = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = (Button) findViewById(id.button1);

        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                // Click button 3-4 times and there will be natification and
                // click one of them

                notificationforChat("Message" + i,"sender" + i,i);
                //notificationforChat("sender" + i, "Message" + i, i);
                i++;
            }
        });

    }

    public void notificationforChat(String message, String sender,int notificationID) {
        Bundle bundle = new Bundle();
        bundle.putString("key", message);

        NotificationManager notifManager = (NotificationManager) this
                .getSystemService(this.NOTIFICATION_SERVICE);
        int uniqueInteger = notificationID;// create a unique Integer
        int icon = R.drawable.ic_launcher;

        NotificationCompat2.Builder mNotification = new NotificationCompat2.Builder(
                this).setSmallIcon(icon).setContentTitle(sender)
                .setContentIntent(getPendingIntent(bundle, uniqueInteger));

        mNotification.setDefaults(Notification.DEFAULT_LIGHTS
                | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);
        mNotification.setAutoCancel(true);
        notifManager.notify(uniqueInteger, mNotification.build());
    }

    private PendingIntent getPendingIntent(Bundle bundle, int rc) {
        Intent notificationIntent = new Intent(MainActivity.this, UserChatActivity.class);
        notificationIntent.putExtras(bundle);
        return PendingIntent.getActivity(this, rc, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
    }
}

次に、userChatActivityで、

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class UserChatActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        Intent intent = getIntent();        
        String key = intent.getStringExtra("key");      

        Log.v("notifica",key);

    }

}
于 2012-11-27T07:25:36.403 に答える
0

常に最新のものが開かれるようですが、これはあなたが望んでいたものではありませんか?

あなたが説明したケースでは、2 つの別々の通知が必要ですか? :A 用に 1 つ、:B 用に 1 つ ?

于 2012-12-04T19:48:14.693 に答える