android - PendingIntent ইন্টেন্ট অতিরিক্ত প্রেরণ করে না




android-intent android-service (2)

আমার MainActicity একটি Intent সাথে RefreshService শুরু করে যার একটি boolean অতিরিক্ত আছে যা isNextWeek নামে isNextWeek

আমার RefreshService একটি Notification যা আমার প্রধান RefreshService শুরু করে যখন ব্যবহারকারী এটি ক্লিক করে।

এই মত দেখাচ্ছে:

    Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);

    Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
    pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
    notification = builder.build();
    // Hide the notification after its selected
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(NOTIFICATION_REFRESH, notification);

আপনি notificationIntent দেখতে পারেন যেমন IS_NEXT_WEEK অতিরিক্ত IS_NEXT_WEEK থাকা উচিত, এর সাথে IS_NEXT_WEEK এর মান যা isNextWeek রাখা হয়।

যখন আমি এই Notification এখন ক্লিক করি তখন সর্বদা আমি isNextWeek মান হিসাবে false পেতে isNextWeek

আমি মূল MainActivity মান পেয়েছি:

    isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);

লগইন করুন:

08-04 00:19:32.500  13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510  13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510  13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990  13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false

যখন আমি সরাসরি "MainSactValue" এর সাথে একটি Intent সহ মূল অ্যাক্টিভিটি শুরু করি, এটির মতো:

    Intent i = new Intent(this, MainActivity.class);
    i.putExtra(IS_NEXT_WEEK, isNextWeek);
    finish();
    startActivity(i);

সবকিছুই ভাল কাজ করে এবং যখন true তখন isNextWeek true

আমি কি false বলি যে সর্বদা false মূল্য আছে?

হালনাগাদ

এটি সমস্যার সমাধান করে: https://stackoverflow.com/a/18049676/2180161

উক্তি:

আমার সন্দেহ হচ্ছে, যেহেতু ইন্টেন্টের মধ্যে একমাত্র জিনিস পরিবর্তন হচ্ছে, অতিরিক্তগুলি হল, PendingIntent.getActivity(...) ফ্যাক্টরি পদ্ধতিটি কেবল অপ্টিমাইজেশন হিসাবে পুরানো অভিপ্রায়টি পুনঃব্যবহার করছে।

রিফ্রেশ পরিষেবাতে, চেষ্টা করুন:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

দেখুন:

http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

আপডেট 2

উত্তরটি দেখুন উত্তরটি কেন PendingIntent.FLAG_UPDATE_CURRENT ব্যবহার করা ভাল।


আমি মনে করি আপনি যখন আপনার কার্যকলাপে onNewIntent(Intent) ওভাররাইড করে একটি নতুন এক পাবেন তখন আপনি Intent আপডেট করতে হবে। আপনার কার্যকলাপে নিম্নলিখিত যোগ করুন:

@Override
public void onNewIntent(Intent newIntent) {
    this.setIntent(newIntent);

    // Now getIntent() returns the updated Intent
    isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);        
}

সম্পাদনা:

এটি শুধুমাত্র তখনই প্রয়োজন যখন অভিপ্রায় প্রাপ্ত হওয়ার পরে আপনার কার্যকলাপ ইতিমধ্যে শুরু হয়ে গেছে। আপনার ক্রিয়াকলাপটি যদি শুরু হয় (এবং পুনরায় শুরু না করা হয়), তখন সমস্যাটি অন্য কোথাও এবং আমার পরামর্শ এটি ঠিক করতে পারে না।


নিম্নলিখিত কোড কাজ করা উচিত: -

int icon = R.drawable.icon;
String message = "hello";
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);

Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.putExtra("isNexWeek", true);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, pIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);

MainActivity অন ক্রিয়েট:

if (getIntent().getExtras() != null && getIntent().getExtras().containsKey("isNextWeek")) {
        boolean isNextWeek = getIntent().getExtras().getBoolean("isNextWeek");
}




android-pendingintent