কীভাবে নোটিফিকেশন ব্যবহার করবেন to বিল্ডার


101

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

এটি নোটিফিকেশন.বিল্ডার ব্যবহার করতে বলে।

  • আমি কিভাবে এটা ব্যবহার করব?

আমি যখন একটি নতুন উদাহরণ তৈরি করার চেষ্টা করি তখন তা আমাকে বলে:

Notification.Builder cannot be resolved to a type

আমি লক্ষ্য করেছি যে এটি API স্তর 11 (অ্যান্ড্রয়েড 3.0) থেকে কাজ করে।
মোবাইলদেব অ্যালেক্স

উত্তর:


86

এটি এপিআই 11-এ রয়েছে, সুতরাং আপনি যদি 3.0 এর আগে কোনও কিছুর জন্য বিকাশ করছেন তবে আপনার পুরানো এপিআই ব্যবহার করা চালিয়ে যাওয়া উচিত।

আপডেট : নোটিফিকেশন কমপ্যাট.বিল্ডার ক্লাসটি সমর্থন প্যাকেজে যুক্ত করা হয়েছে যাতে আমরা এটি API স্তরের ভি 4 এবং আরও সমর্থন করতে পারি:

http://developer.android.com/references/android/support/v4/app/NotificationsCompat.Builder.html


ধন্যবাদ আমি আশ্চর্য হয়েছি কেন এটি ফাংশন পৃষ্ঠাগুলিতে তারা নিজেরাই উল্লেখ করে না
স্যারিকো

15
হ্যাঁ: হতাশার সতর্কতা আমার মতে কিছুটা সময়ের আগে, তবে আমি কী জানি।
Femi

152

বিজ্ঞপ্তি.বিল্ডার এপিআই 11 বা নোটিফিকেশনকম্যাট.বিল্ডার এপিআই 1

এটি ব্যবহারের উদাহরণ।

Intent notificationIntent = new Intent(ctx, YourClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx,
        YOUR_PI_REQ_CODE, notificationIntent,
        PendingIntent.FLAG_CANCEL_CURRENT);

NotificationManager nm = (NotificationManager) ctx
        .getSystemService(Context.NOTIFICATION_SERVICE);

Resources res = ctx.getResources();
Notification.Builder builder = new Notification.Builder(ctx);

builder.setContentIntent(contentIntent)
            .setSmallIcon(R.drawable.some_img)
            .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.some_big_img))
            .setTicker(res.getString(R.string.your_ticker))
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setContentTitle(res.getString(R.string.your_notif_title))
            .setContentText(res.getString(R.string.your_notif_text));
Notification n = builder.build();

nm.notify(YOUR_NOTIF_ID, n);

13
আমি দেখতে পাচ্ছি
ভিটি

6
আমি মনে করি কারও কাছে গুগলকে বলা উচিত যে তাদের Notification.Builderডক্স পৃষ্ঠায় গুরুতর টাইপ রয়েছে । তারা যা বলছিল আমি তা করছিলাম কিন্তু এটি কোনও অর্থবোধ করে না। আমি এখানে এসে দেখি এটি অন্যরকম। আমি আপনার উত্তরটির সত্যই প্রশংসা করি কারণ এটি আমাকে ডকটিতে থাকা ভুল সম্পর্কে সচেতন করে তুলেছে।
অ্যান্ডি

5
দস্তাবেজগুলি হ্রাস builder.getNotification()করা হয়েছে বলে জানায় । এটি আপনার ব্যবহার করা উচিত বলে builder.build()
মনারি

26
নোটিফিকেশনবিল্ডার.ইউবিল্ড () এর জন্য এপিআই লেভেল 16 বা তারও বেশি প্রয়োজন। এপিআই স্তর 11 এবং 15 এর মধ্যে যে কোনও কিছুই আপনার নোটিফিকেশনবিল্ডার।
ক্যামিল স্যাভিগনি

4
@MrTristan: ডকুমেন্টেশন লেখা হিসেবে setSmallIcon(), setContentTitle()এবং setContentText()সর্বনিম্ন প্রয়োজনীয়তা আছে।
কাও

70

এখানে নির্বাচিত উত্তরের NotificationCompat.Builderপাশাপাশি উত্স ট্রিকস থেকে শ্রেণীর জন্য কয়েকটি নমুনা কোড রয়েছে :

// Add app running notification  

    private void addNotification() {



    NotificationCompat.Builder builder =  
            new NotificationCompat.Builder(this)  
            .setSmallIcon(R.drawable.ic_launcher)  
            .setContentTitle("Notifications Example")  
            .setContentText("This is a test notification");  

    Intent notificationIntent = new Intent(this, MainActivity.class);  
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,   
            PendingIntent.FLAG_UPDATE_CURRENT);  
    builder.setContentIntent(contentIntent);  

    // Add as notification  
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
    manager.notify(FM_NOTIFICATION_ID, builder.build());  
}  

// Remove notification  
private void removeNotification() {  
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
    manager.cancel(FM_NOTIFICATION_ID);  
}  

5
নতুন কমপ্যাট বিল্ডার ব্যবহার করে প্রথম কোড যা আসলে কাজ করেছে। সাবাশ!
জেমস এমভি

4
আমার জন্য ভাল কাজ করেছেন। দুটি নোট: 1) আপনার "আইক_লাঞ্চার" এর জন্য একটি 32x32 আইকন তৈরি করতে হবে। স্বচ্ছ ব্যাকগ্রাউন্ডে সাদা অঙ্কন 2) আপনাকে int FM_NOTIFICATION_ID = [আপনার পছন্দের র্যান্ডম] এর জন্য কিছু এলোমেলো সংখ্যার সংজ্ঞা দিতে হবে;
Anders8

4
আপনাকে অনেক ধন্যবাদ, আমার সমস্যাটি ছিল: আমি যখন দ্বিতীয়বার বিজ্ঞপ্তিতে ক্লিক করেছি, তখন পূর্ববর্তী খণ্ডটি উন্মুক্ত ছিল এবং এই লাইনটি "পেন্ডিং ইন্টেন্ট.এফএলএজি_উপিডিজেসিআরইএনটি" আমার সমস্যা সমাধান করেছে, এবং আমার দিনটি তৈরি করেছে
শ্রুতি

4

বিজ্ঞপ্তি নির্মাতা কঠোরভাবে অ্যান্ড্রয়েড এপিআই লেভেল 11 এবং তারপরে (অ্যান্ড্রয়েড 3.0 এবং তার বেশি) এর জন্য।

অতএব, আপনি যদি হানিকম্ব ট্যাবলেটগুলি লক্ষ্য না করে থাকেন তবে আপনার বিজ্ঞপ্তি নির্মাতা ব্যবহার করা উচিত নয় বরং নিম্নলিখিত উদাহরণের মতো পুরানো বিজ্ঞপ্তি তৈরির পদ্ধতি অনুসরণ করা উচিত ।


4
আপনি সামঞ্জস্যযোগ্যতা গ্রন্থাগারটি ব্যবহার করতে পারেন, তাই আপনি এটি এপিআই 4 বা তারও বেশি ব্যবহার করতে পারেন।
Leandros

3

আপডেট করুন অ্যান্ড্রয়েড-এন (মার্চ -2016)

আরও তথ্যের জন্য দয়া করে বিজ্ঞপ্তি আপডেট লিঙ্ক দেখুন।

  • প্রত্যুত্তর
  • বান্ডিল বিজ্ঞপ্তি
  • কাস্টম দর্শন

অ্যান্ড্রয়েড এন আপনাকে অনুরূপ বিজ্ঞপ্তিগুলি একটি একক বিজ্ঞপ্তি হিসাবে উপস্থিত হতে বান্ডিল করতে দেয়। এটি সম্ভব করার জন্য, অ্যান্ড্রয়েড এন বিদ্যমান NotificationCompat.Builder.setGroup()পদ্ধতিটি ব্যবহার করে । ব্যবহারকারীরা প্রতিটি বিজ্ঞপ্তি প্রসারিত করতে পারেন এবং বিজ্ঞপ্তির ছায়া থেকে পৃথক পৃথকভাবে বিজ্ঞপ্তিগুলির প্রত্যুত্তরে উত্তর এবং বরখাস্তের মতো ক্রিয়া সম্পাদন করতে পারে।

এটি একটি প্রাক-বিদ্যমান নমুনা যা একটি সাধারণ পরিষেবা দেখায় যা বিজ্ঞপ্তিকম্প্যাট ব্যবহার করে বিজ্ঞপ্তি প্রেরণ করে। ব্যবহারকারীর প্রতিটি অপঠিত কথোপকথন একটি স্বতন্ত্র বিজ্ঞপ্তি হিসাবে প্রেরণ করা হয়।

অ্যান্ড্রয়েড এন এ উপলব্ধ নতুন বিজ্ঞপ্তি বৈশিষ্ট্যগুলির সুবিধা নিতে এই নমুনাটি আপডেট করা হয়েছে

নমুনা কোড


হাই, এখানে আপনি কীভাবে এই পদ্ধতিটি অ্যান্ড্রয়েড .0.০ কাজ করতে পারবেন যখন আমরা ডাউনলোডার_ লাইবারি ব্যবহার করছি। আমি Eclipse SDK এ আছি - 25.1.7 || ADT 23.0.X দুঃখের সাথে || গুগল
এপিপি এক্সপেনশন

2

বিজ্ঞপ্তিগুলি তৈরি করতে আমার সমস্যা হয়েছিল (কেবলমাত্র Android 4.0+ এর জন্য বিকাশ করা)। এই লিঙ্কটি আমাকে সঠিকভাবে দেখিয়েছিল আমি কী ভুল করছি এবং নিম্নলিখিতটি বলেছেন:

Required notification contents

A Notification object must contain the following:

A small icon, set by setSmallIcon()
A title, set by setContentTitle()
Detail text, set by setContentText()

মূলত আমি এর মধ্যে একটি মিস করছি। এটির সাথে সমস্যার সমাধানের ভিত্তি হিসাবে নিশ্চিত করুন যে আপনার খুব কমপক্ষে এগুলি রয়েছে। আশা করি এটি অন্য কারও মাথা ব্যথা বাঁচাতে পারবে।


সুতরাং আপনি যদি ভাবেন: "আমি পরে একটি আইকন খুঁজে পাব", আপনি কোনও বিজ্ঞপ্তি-ভালবাসা পাবেন না। এটির জন্য ধন্যবাদ;)
Nanne

2

এটি এপিআই 8 তেও কাজ করে আপনি এই কোডটি ব্যবহার করতে পারেন:

 Notification n = 
   new Notification(R.drawable.yourownpicturehere, getString(R.string.noticeMe), 
System.currentTimeMillis());

PendingIntent i=PendingIntent.getActivity(this, 0,
             new Intent(this, NotifyActivity.class),
                               0);
n.setLatestEventInfo(getApplicationContext(), getString(R.string.title), getString(R.string.message), i);
n.number=++count;
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.flags |= Notification.DEFAULT_SOUND;
n.flags |= Notification.DEFAULT_VIBRATE;
n.ledARGB = 0xff0000ff;
n.flags |= Notification.FLAG_SHOW_LIGHTS;

// Now invoke the Notification Service
String notifService = Context.NOTIFICATION_SERVICE;
NotificationManager mgr = 
   (NotificationManager) getSystemService(notifService);
mgr.notify(NOTIFICATION_ID, n);

অথবা আমি এ সম্পর্কে একটি দুর্দান্ত টিউটোরিয়াল অনুসরণ করার পরামর্শ দিই


2

আমি ব্যবহার করেছি

Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Firebase Push Notification")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());

1

যদি এটি কাউকে সহায়তা করে ... নতুন কোনও পুরানো এপিআইয়ের বিরুদ্ধে পরীক্ষা করার সময় সমর্থন প্যাকেজটি ব্যবহার করে বিজ্ঞপ্তিগুলি সেট আপ করতে আমার অনেক সমস্যা হচ্ছে। আমি তাদের নতুন ডিভাইসে কাজ করতে সক্ষম হয়েছি কিন্তু পুরানো ডিভাইসে পরীক্ষা করার সময় ত্রুটি পেয়েছি। পরিশেষে আমার পক্ষে এটি কী কাজ করে তা হ'ল নোটিফিকেশন ফাংশন সম্পর্কিত সমস্ত আমদানি মুছে ফেলা। বিশেষত নোটিফিকেশন কমপ্যাট এবং টাস্কস্ট্যাকবিল্ডার। দেখে মনে হচ্ছে শুরুতে আমার কোড সেট আপ করার সময় আমদানিগুলি যেখানে নতুন বিল্ড থেকে যোগ করা হয়েছে এবং সমর্থন প্যাকেজটি নয়। তারপরে যখন আমি এই আইটেমগুলি পরেগ্রহণের পরে প্রয়োগ করতে চাইছিলাম তখন আমাকে সেগুলি আবার আমদানি করার অনুরোধ জানানো হয়নি। আশা করি এটি উপলব্ধিযোগ্য, এবং এটি অন্য কাউকে সাহায্য করবে :)


0
          // This is a working Notification
       private static final int NotificID=01;
   b= (Button) findViewById(R.id.btn);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Notification notification=new       Notification.Builder(MainActivity.this)
                    .setContentTitle("Notification Title")
                    .setContentText("Notification Description")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .build();
            NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            notification.flags |=Notification.FLAG_AUTO_CANCEL;
            notificationManager.notify(NotificID,notification);


        }
    });
}

0

স্বনির্ভর উদাহরণ

এই উত্তরের মতো একই কৌশল কিন্তু:

  • স্ব-অন্তর্নিহিত: কপি পেস্ট করুন এবং এটি সংকলন এবং চলবে
  • আপনি যতটা নোটিফিকেশন উত্সাহিত করতে চান তার উদ্দেশ্যে একটি বাটন সহ এবং উদ্দেশ্য এবং বিজ্ঞপ্তি আইডি সহ খেলুন

সূত্র:

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

public class Main extends Activity {
    private int i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Button button = new Button(this);
        button.setText("click me");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Notification notification = new Notification.Builder(Main.this)
                        /* Make app open when you click on the notification. */
                        .setContentIntent(PendingIntent.getActivity(
                                Main.this,
                                Main.this.i,
                                new Intent(Main.this, Main.class),
                                PendingIntent.FLAG_CANCEL_CURRENT))
                        .setContentTitle("title")
                        .setAutoCancel(true)
                        .setContentText(String.format("id = %d", Main.this.i))
                        // Starting on Android 5, only the alpha channel of the image matters.
                        // https://stackoverflow.com/a/35278871/895245
                        // `android.R.drawable` resources all seem suitable.
                        .setSmallIcon(android.R.drawable.star_on)
                        // Color of the background on which the alpha image wil drawn white.
                        .setColor(Color.RED)
                        .build();
                final NotificationManager notificationManager =
                        (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(Main.this.i, notification);
                // If the same ID were used twice, the second notification would replace the first one. 
                //notificationManager.notify(0, notification);
                Main.this.i++;
            }
        });
        this.setContentView(button);
    }
}

অ্যান্ড্রয়েড 22-এ পরীক্ষা করা হয়েছে।

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