ইভেন্ট খারিজ করতে সোয়াইপ ক্লিক করুন


85

কোনও পরিষেবা শেষ হয়ে গেলে (সাফল্য বা ব্যর্থতা) ব্যবহারকারীকে সতর্ক করতে আমি অ্যান্ড্রয়েড বিজ্ঞপ্তি ব্যবহার করছি এবং প্রক্রিয়াটি শেষ হয়ে গেলে আমি স্থানীয় ফাইলগুলি মুছতে চাই।

আমার সমস্যাটি হ'ল ব্যর্থতার ক্ষেত্রে - আমি ব্যবহারকারীকে "পুনরায় চেষ্টা" বিকল্পটি দিতে চাই। এবং যদি তিনি পুনরায় চেষ্টা না করে এবং বিজ্ঞপ্তিটি খারিজ করতে চান তবে আমি প্রক্রিয়াটির উদ্দেশ্যে (চিত্রগুলি ...) এর জন্য সংরক্ষিত স্থানীয় ফাইলগুলি মুছতে চাই।

বিজ্ঞপ্তির সোয়াইপ-টু-খারিজ ইভেন্টটি ধরার কোনও উপায় আছে কি?

উত্তর:


145

ডিলিটইন্টেন্ট : ডিলিটইন্টেন্ট একটি মুলতুবি থাকা বিষয়বস্তু যা কোনও নোটিফিকেশনের সাথে সম্পর্কিত হতে পারে এবং নোটিফিকেশন মুছে ফেলা হলে বরখাস্ত হয়ে যায়:

  • ব্যবহারকারীর নির্দিষ্ট ক্রিয়া
  • ব্যবহারকারী সমস্ত বিজ্ঞপ্তি মুছুন।

আপনি ব্রডকাস্ট রিসিভারের জন্য মুলতুবি ইন্টেন্ট সেট করতে পারেন এবং তারপরে আপনি চান এমন কোনও ক্রিয়া সম্পাদন করতে পারেন।

  Intent intent = new Intent(this, MyBroadcastReceiver.class);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, 0);
  Builder builder = new Notification.Builder(this):
 ..... code for your notification
  builder.setDeleteIntent(pendingIntent);

মাইবারডকাস্টরিসিভার

public class MyBroadcastReceiver extends BroadcastReceiver {
      @Override
      public void onReceive(Context context, Intent intent) {
             .... code to handle cancel
         }

  }

8
এইতো দেরি হয়ে গেছে। আমি কেবল ভাবছিলাম যে কোনও বিজ্ঞপ্তি builder.setAutoCancel(true);ক্লিক করার সময় কোনও ব্যবহারকারী বিজ্ঞপ্তি প্রকাশের জন্য অনুরূপ পন্থা রয়েছে কি না এবং এটি বাতিল হয়ে যায়, মোছার-উদ্দেশ্যটি ট্রিগার হয় না
দেবানশু_কাউশিক

4
@ দেবদেব_অ্যান্ড্রয়েড চেকআউট বিকাশকারী.অ্যান্ড্রয়েড
রেফারেন্স

@ পিটার এটিকে ওরিও এবং ওভারে কাজ করার জন্য আপনাকে এই কোডের এই লাইনটি যুক্ত করতে হবে: বিজ্ঞপ্তি নোট = বিল্ডার.বিল্ড (); নোট.ফ্লেগস
Dimas Mendes

86

একটি সম্পূর্ণরূপে নিষ্ক্রিয় উত্তর (উত্তরের জন্য মিঃ আমাকে ধন্যবাদ):

1) সোয়াইপ-থেকে-খারিজ ইভেন্টটি পরিচালনা করতে একটি রিসিভার তৈরি করুন:

public class NotificationDismissedReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
      int notificationId = intent.getExtras().getInt("com.my.app.notificationId");
      /* Your code to handle the event here */
  }
}

2) আপনার ম্যানিফেস্টে একটি এন্ট্রি যুক্ত করুন:

<receiver
    android:name="com.my.app.receiver.NotificationDismissedReceiver"
    android:exported="false" >
</receiver>

3) মুলতুবি উদ্দেশ্যগুলির জন্য একটি অনন্য আইডি ব্যবহার করে মুলতুবি থাকা উদ্দেশ্য তৈরি করুন (বিজ্ঞপ্তি আইডিটি এখানে ব্যবহার করা হয়) এটি ছাড়া প্রতিটি বরখাস্ত ইভেন্টের জন্য একই অতিরিক্তগুলি পুনরায় ব্যবহার করা হবে:

private PendingIntent createOnDismissedIntent(Context context, int notificationId) {
    Intent intent = new Intent(context, NotificationDismissedReceiver.class);
    intent.putExtra("com.my.app.notificationId", notificationId);

    PendingIntent pendingIntent =
           PendingIntent.getBroadcast(context.getApplicationContext(), 
                                      notificationId, intent, 0);
    return pendingIntent;
}

4) আপনার বিজ্ঞপ্তি তৈরি করুন:

Notification notification = new NotificationCompat.Builder(context)
              .setContentTitle("My App")
              .setContentText("hello world")
              .setWhen(notificationTime)
              .setDeleteIntent(createOnDismissedIntent(context, notificationId))
              .build();

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(notificationId, notification);

আমার পক্ষে কাজ করেনি, সর্বদা ত্রুটির সাথে পরিণতি হয় "রিসিভার ইনস্ট্যান্ট করতে অক্ষম .... কোনও শূন্য আর্গুমেন্ট কনস্ট্রাক্টর নেই"। আমি অন্য অনুরূপ সমাধানটি প্রয়োগ করার পরে তবে ব্রডকাস্ট রিসিভারের নিবন্ধকরণের সাথেই সমাধান করা হয়েছে: স্ট্যাকওভারফ্লো
প্রশ্নগুলি

এটি আমার পক্ষে কাজ করে ut তবে আপনি বিজ্ঞপ্তিটি ক্লিক করার পরে ইভেন্টটি শুরু করা যাবে না the আমি কীভাবে ক্লিক ইভেন্টটি শুনতে পারি?
অ্যালেন ভর্ক

দস্তাবেজগুলির মতে, আপনি যদি ব্যবহার করেন setAutoCancel(true)তবে বিজ্ঞপ্তিটি ক্লিক করার পরে বাতিল হয়ে যাবে এবং মুছে ফেলা উদ্দেশ্যটিও বিকাশ করবে
অ্যান্ড্রয়েড.com

প্যারামিটার পাসিং ব্যতীত এটি কাজ করে, অতিরিক্ত সেট করা থাকলেও ইন্টেন্ট.জেটএক্সট্রাস () সর্বদা নালায় ফিরে আসে। এটি কাজ করার জন্য আপনাকে এ জাতীয় ক্রিয়াটি সেট করতে হবে: resultIntent.setAction (অনন্য_অ্যাকশন);
lxknvlk

0

অন্য আইডিয়া:

আপনি যদি সাধারণভাবে কোনও বিজ্ঞপ্তি তৈরি করেন তবে এগুলির মধ্যে দুটি, 3 বা 3 টি ক্রিয়াও আপনার প্রয়োজন। আমি একটি "নোটিফাইমেনজার" তৈরি করেছি এটি আমার প্রয়োজনীয় সমস্ত বিজ্ঞপ্তি তৈরি করে এবং সমস্ত ইনটেন্ট কলও গ্রহণ করে। সুতরাং আমি সমস্ত ক্রিয়া পরিচালনা করতে পারি এবং এছাড়াও এক জায়গায় বরখাস্ত ইভেন্টটি ধরতে পারি।

public class NotifyPerformService extends IntentService {

@Inject NotificationManager notificationManager;

public NotifyPerformService() {
    super("NotifyService");
    ...//some Dagger stuff
}

@Override
public void onHandleIntent(Intent intent) {
    notificationManager.performNotifyCall(intent);
}

মুছে ফেলার জন্য এটি ব্যবহার করুন (নোটিফিকেশন ম্যানেজারে):

private PendingIntent createOnDismissedIntent(Context context) {
    Intent          intent          = new Intent(context, NotifyPerformMailService.class).setAction("ACTION_NOTIFY_DELETED");
    PendingIntent   pendingIntent   = PendingIntent.getService(context, SOME_NOTIFY_DELETED_ID, intent, 0);

    return pendingIntent;
}

এবং যেটি আমি মুছে ফেলতে ইচ্ছাকৃতভাবে এটির মতো সেট করতে ব্যবহার করি (নোটিফিকেশন ম্যানেজারে):

private NotificationCompat.Builder setNotificationStandardValues(Context context, long when){
    String                          subText = "some string";
    NotificationCompat.Builder      builder = new NotificationCompat.Builder(context.getApplicationContext());


    builder
            .setLights(ContextUtils.getResourceColor(R.color.primary) , 1800, 3500) //Set the argb value that you would like the LED on the device to blink, as well as the rate
            .setAutoCancel(true)                                                    //Setting this flag will make it so the notification is automatically canceled when the user clicks it in the panel.
            .setWhen(when)                                                          //Set the time that the event occurred. Notifications in the panel are sorted by this time.
            .setVibrate(new long[]{1000, 1000})                                     //Set the vibration pattern to use.

            .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
            .setSmallIcon(R.drawable.ic_white_24dp)
            .setGroup(NOTIFY_GROUP)
            .setContentInfo(subText)
            .setDeleteIntent(createOnDismissedIntent(context))
    ;

    return builder;
}

এবং অবশেষে একই নোটিফিকেশন ম্যানেজারটি হল সঞ্চালন কার্য:

public void performNotifyCall(Intent intent) {
    String  action  = intent.getAction();
    boolean success = false;

    if(action.equals(ACTION_DELETE)) {
        success = delete(...);
    }

    if(action.equals(ACTION_SHOW)) {
        success = showDetails(...);
    }

    if(action.equals("ACTION_NOTIFY_DELETED")) {
        success = true;
    }


    if(success == false){
        return;
    }

    //some cleaning stuff
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.