অ্যান্ড্রয়েড বিজ্ঞপ্তি প্রদর্শিত হচ্ছে না


115

আমার এমন একটি প্রোগ্রাম দরকার যা অ্যান্ড্রয়েডে একটি বিজ্ঞপ্তি যুক্ত করবে। এবং যখন কেউ বিজ্ঞপ্তিতে ক্লিক করে, তখন সেগুলি আমার দ্বিতীয় ক্রিয়াকলাপে নিয়ে যায়।

আমি কোড স্থাপন করেছি। বিজ্ঞপ্তিটি কাজ করা উচিত, তবে কোনও কারণে এটি কাজ করছে না। Notificationএ সব দেখানো হয় না। আমি কী মিস করছি জানি না।

এই ফাইলগুলির কোড:

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "test@gmail.com")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected

notificationManager.notify(0, n);

আপনি প্রশ্ন জিজ্ঞাসা করার সময় আরও সংক্ষিপ্ত হওয়ার চেষ্টা করুন। আপনি কী কাজ করছেন তা উল্লেখ করতে ব্যর্থ হন । বাস্তবে, আপনি এমনও উল্লেখ করেন না যে কিছু কাজ করছে না। হয় Activityলঞ্চ করা হচ্ছে? হয় Notificationনা দেখাচ্ছে?
slinden77

3
@ ডিএমএমএইচ আমি আমার প্রশ্নে বলেছিলাম আমার সমস্যা কী! এবং আমি প্রশ্নের সাথে কোনও ভুল খুঁজে পাইনি। আমার প্রশ্নটি সমস্যা সম্পর্কে নির্দিষ্ট ছিল। আপনি যদি বিশেষজ্ঞ না হন তবে ঝাঁকুনির দরকার নেই! এবং tato469 এর উত্তরটি ঠিক ছিল।
চৌধুরী এএম

3
আমি উল্লেখ করছি যে এই সাইটের উদ্দেশ্য আপনার সমস্যাগুলি স্থির করার জন্য নয়, তবে অন্যরাও সমস্যার সমাধান খুঁজে পেতে সক্ষম হবে। আমি খোঁচা দিচ্ছি না। আমি দুঃখিত আমি আপনার অনুভূতিতে আহত হয়েছি, তবে সত্যটি আপনার প্রশ্নটি ভুল ছিল, উত্তরটি ভুল ছিল, এবং এই সমস্ত বিভ্রান্তিকর তথ্য অন্যান্য নবাগত প্রোগ্রামারদের দিকে নিয়ে যাবে, যাদের আপনার বর্ণনার মতো একই সমস্যা রয়েছে, সমাধানের চেষ্টা করবেন না যা কাজ করে না আপনার প্রদত্ত কোডের ভিত্তিতে। এটি কোনও ক্ষেত্রে প্রাসঙ্গিক নয় বা না আমি বিশেষজ্ঞ কিনা তা নয়। বিশেষত যেহেতু আমি সঠিক নই, আপনার প্রশ্নটি অস্পষ্ট এবং অন্য উত্তরটি ভুল।
slinden77

আমি এই প্রশ্নটি এবং উত্তরটি মুছে ফেলার জন্য জিজ্ঞাসা করছি, কারণ এটি বিভ্রান্তিকর। আপনার দিনটি শুভ হোক.
slinden77

1
প্রশ্নটি পরিবর্তিত হয়েছে, যাতে লোকেরা বুঝতে পারে যে সমস্যাটি কী।
চৌধুরী এএম

উত্তর:


412

কোডটি কোনও আইকন ছাড়া কাজ করবে না। সুতরাং, setSmallIconবিল্ডার চেইনে কলটি কাজ করার জন্য এটি যুক্ত করুন:

.setSmallIcon(R.drawable.icon)

অ্যান্ড্রয়েড ওরিও (8.0) এবং তারপরে

অ্যান্ড্রয়েড 8 এ channelIdব্যবহার করে সম্পত্তি নির্ধারণের একটি নতুন প্রয়োজনীয়তার পরিচয় দিয়েছে NotificationChannel

private NotificationManager mNotificationManager;

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");

mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);

mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

// === Removed some obsoletes
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        NotificationManager.IMPORTANCE_HIGH);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());

কীভাবে চ্যানেল_আইডি পাবেন? দয়া করে সহায়তা করুন
অনন্ত প্রসাদ

@ ল্যালেন্টাপ্রসাদ চ্যানেল_আইডি আপনার জন্য একটি সনাক্তকারী হিসাবে বোঝানো হচ্ছে। চ্যাট কথোপকথন বা গোষ্ঠী চ্যাটের মতো এটির দ্বারা আপনি বিজ্ঞপ্তিগুলি গ্রুপ করেন।
কেসি ড্যানিয়েল

ধন্যবাদ, setChannelIdপ্রয়োজনীয় আমি এটি যুক্ত করার আগে, বিজ্ঞপ্তিটি আমার SONY ডিভাইসে দেখায় কিন্তু SAMSUNG ডিভাইসে নয়।
উইজেলি


2
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ mBuilder.setChannelId(channelId); }এই চেকটি ছাড়াই চেকটি অন্তর্ভুক্ত করুন , আপনার ডিভাইস API> = 26 থাকলেও বিজ্ঞপ্তিটি প্রদর্শিত হবে না।
কুশিক শম চৌধুরী চৌধুরী

58

আসলে আর্নান্দো ভেলের উত্তর সঠিক বলে মনে হচ্ছে না। তারপরে আবারও, আপনার প্রশ্ন অত্যধিক অস্পষ্ট কারণ আপনি কী ভুল বা কাজ করছে না তা উল্লেখ করতে ব্যর্থ হন।

আপনার কোডটি দেখে আমি ধরে নিচ্ছি যে Notificationসহজভাবে প্রদর্শিত হচ্ছে না।

আপনার বিজ্ঞপ্তিটি প্রদর্শিত হচ্ছে না, কারণ আপনি কোনও আইকন সরবরাহ করেন নি। যদিও এসডিকে ডকুমেন্টেশনগুলি এটির প্রয়োজনীয়তার কথা উল্লেখ না করে তবে এটি আসলে খুব বেশি এবং আপনার Notificationএটি ছাড়া প্রদর্শন করা হবে না।

addActionশুধুমাত্র 4.1 থেকে উপলব্ধ। এর আগে আপনি PendingIntentএকটি চালু করতে ব্যবহার করবেন Activity। আপনি একটি নির্দিষ্ট করে মনে করছেন PendingIntent, তাই আপনার সমস্যা অন্য কোথাও রয়েছে। যৌক্তিকরূপে, একটিতে এটি অবশ্যই অনুপস্থিত আইকনটি শেষ করা উচিত।


আমি এই সমস্যাটি খুঁজে পেয়েছি। তবে সঠিক উত্তরের জন্য ধন্যবাদ। আমি সত্যিই আপনার সাহায্য তারিফ করা.
চৌধুরী এএম

1
আপনি বলেছিলেন যে অ্যাডএকশনটি কেবল ৪.১ থেকে পাওয়া যায় তবে এটি ভুল, আমি এটি ২.৩ এ ব্যবহার করেছি। বোতামটি সম্পর্কে বিজ্ঞপ্তিটি সম্পর্কে নয় রেফারেন্স ম্যানুয়াল আলোচনা: "অ্যান্ড্রয়েড 4.1 এর আগে প্ল্যাটফর্মগুলিতে অ্যাকশন বোতামগুলি উপস্থিত হবে না" " আপনি এখানে পরীক্ষা করতে পারেন: অ্যাডএকশনটি android.support.v4.app- এ অন্তর্ভুক্ত রয়েছে
আর্নান্দো ভ্যালে

1
ওপি আপনার পরামর্শ মতো Notification.Builderনয় NotificationCompat.Builder, ব্যবহার করছে। কেবলমাত্র একটি সামঞ্জস্য লাইব্রেরি রয়েছে এবং এটি ব্যবহার করা যেতে পারে, তার অর্থ এই নয় যে ফাংশনটি সাধারণ এপিআইতে উপলব্ধ। আপনি যে লিঙ্কটি সরবরাহ করেছেন এটি এটিকে নির্ধারণ করে। এই প্রশ্নটি স্পষ্টভাবে সম্পর্কিত Notification.Builder, উদাহরণ হিসাবে দেখা যায়। এবং সামঞ্জস্য লাইব্রেরি সম্ভবত 4.1 উপলব্ধ হওয়ার পরে কেবল এই ফাংশনটি অন্তর্ভুক্ত করেছিল। আপনার উত্তর বিভ্রান্তিমূলক, কারণ এখন আপনি প্রস্তাব করেন এটি ২.৩ থেকে পাওয়া যায়।
slinden77

দুঃখিত যদি আমি
ভুল উচ্চারণ

4
আরগ আইকন !! এমনকি এটি অনুপস্থিত অনুধাবন করা হয়নি তবে এটি যুক্ত করে সমস্যার সংশোধন করেছে। নিখোঁজ আইকন সম্পর্কে কনসোলে দরকারী কোনও কিছু দেখেনি, নিঃশব্দে ব্যর্থ হয়েছে বলে মনে হচ্ছে।
পিট

33

আপনি ছোট আইকন অনুপস্থিত ছিল। আমি একই ভুলটি করেছি এবং উপরের পদক্ষেপটি এটি সমাধান করেছে।

অফিসিয়াল ডকুমেন্টেশন অনুসারে: একটি বিজ্ঞপ্তি অবজেক্টে নিম্নলিখিতটি থাকতে হবে:

  1. একটি ছোট আইকন, সেটস্মলইকন () দ্বারা সেট করা

  2. সেটকাউন্টটাইটেল () দ্বারা সেট করা একটি শিরোনাম

  3. বিস্তারিত পাঠ্য, সেটকন্টেন্টটেক্সট দ্বারা সেট ()

  4. অ্যানড্রয়েড 8.0 (এপিআই স্তরের 26) এবং উচ্চতরতে , চ্যানেল তৈরি করার সময় সেটচ্যানেলআইডি () দ্বারা সেট করা বা নোটিফিকেশন কমপ্যাট.বিল্ডার কনস্ট্রাক্টরে সরবরাহ করা একটি বৈধ বিজ্ঞপ্তি চ্যানেল আইডি ।

Http://developer.android.com/guide/topics/ui/notifiers/notifications.html দেখুন


3
এটি সত্য নয়। আপনি যদি সেটকন্টেন্ট ব্যবহার করে একটি কাস্টম বিজ্ঞপ্তি বিন্যাস ব্যবহার করেন তবে কোনও শিরোনাম বা পাঠ্যের প্রয়োজন হবে না।
রায় লি

11

এটি আজ আমাকে ছিন্ন করেছে, তবে আমি বুঝতে পেরেছিলাম কারণ অ্যান্ড্রয়েড 9.০ (পাই) এ ডিফল্টরূপে ডিস্টার্ব করবেন না , অ্যান্ড্রয়েড .1.১ (ওরিও) এর আগে এবং তার আগে কেবল চুপ করে থাকার চেয়ে সমস্ত বিজ্ঞপ্তিগুলি গোপন করে । এটি বিজ্ঞপ্তিগুলিতে প্রযোজ্য নয়।

আমি আমার বিকাশের ডিভাইসের জন্য ডিএনডি রাখা পছন্দ করি, তাই ডিএনডি সেটিংসে গিয়ে সেটিংটি পরিবর্তন করে কেবল বিজ্ঞপ্তিগুলিকে চুপ করে (তবে সেগুলি আড়াল করে না) এটি আমার জন্য স্থির করে দেয়।


9

বিজ্ঞপ্তিগুলি দৃশ্যমান করার জন্য অ্যান্ড্রয়েড 8.1 (ওরিও) এর পরে অ্যানড্রইড সংস্করণগুলির জন্য বিজ্ঞপ্তি চ্যানেলগুলি তৈরি করা বাধ্যতামূলক । ওরিও + অ্যান্ড্রয়েডের জন্য যদি আপনার অ্যাপ্লিকেশনটিতে বিজ্ঞপ্তিগুলি দৃশ্যমান না হয়, আপনার অ্যাপ্লিকেশনটি শুরু হওয়ার পরে আপনাকে নিম্নলিখিত ক্রিয়াকলাপটি কল করতে হবে -

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

1

আমি মনে করি আপনি ভুলে গেছেন

addAction(int icon, CharSequence title, PendingIntent intent)

এখানে দেখুন: অ্যাকশন যুক্ত করুন


1
পদ্ধতিটি addAction()উপলভ্য নয় Notification.Builder
slinden77

1
এটি বিদ্যমান, তবে অবমাননিত। পরিবর্তে, আপনি Actionযে উদাহরণটি তৈরি করতে পারেন তা পাস করতে পারেন Notification.Action.Builder। পিএস, সর্বদা কম্প্যাট বিকল্প (যেমন, বিজ্ঞপ্তি কমপ্যাট) ব্যবহার করুন, যেহেতু গুগল বাগ প্যাচ করে এবং তাদের সাথে আরও ভাল সামঞ্জস্যতা সরবরাহ করে
Gökhan Barış Aker

আপনি যদি কোনও পদক্ষেপ নির্দিষ্ট করতে না চান তবে কেবল .setContentIntent(null)বিল্ডারের সাথে ব্যবহার করুন।
গোখন বড় আখের

1

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে আমার একই সমস্যা ছিল। আমি বিজ্ঞপ্তিগুলি চেষ্টা করে দেখতে পেলাম যে বিজ্ঞপ্তিগুলি আমার অ্যান্ড্রয়েড এমুলেটরটিতে প্রদর্শিত হচ্ছে যা একটি অ্যান্ড্রয়েড .0.০ (নুগ্যাট) সিস্টেম চালায়, যদিও এটি আমার ফোনে চলছিল না যেখানে অ্যান্ড্রয়েড ৮.১ (ওরিও) ছিল।

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


1

আমার জন্য এটি একটি সমস্যা ছিল deviceToken। আপনার ডেটাবেজে বা আপনি বিজ্ঞপ্তি প্রেরণের জন্য যেখানেই এটি অ্যাক্সেস করছেন সেখানে রিসিভার এবং প্রেরক ডিভাইস টোকেনটি সঠিকভাবে আপডেট হয়েছে কিনা তা পরীক্ষা করে দেখুন।

উদাহরণস্বরূপ, অ্যাপ্লিকেশন লঞ্চে ডিভাইস টোকেন আপডেট করতে নিম্নলিখিতটি ব্যবহার করুন। সুতরাং এটি সর্বদা সঠিকভাবে আপডেট করা হবে।

// Device token for push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
  new OnSuccessListener<InstanceIdResult>() {

    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {

        deviceToken = instanceIdResult.getToken();

        // Insert device token into Firebase database
        fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
                .addOnSuccessListener(
                  new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                });
    }
});

এটি কোথায় deviceTokenঘোষণা করা হয়?
পিটার মর্টেনসেন

onSuccessখালি কেন ?
পিটার মর্টেনসেন

@ পিটারমোর্টেনসন .. সাফল্যের সাথে আপনি আপনার যুক্তি যা কিছু নতুন উদ্দেশ্য শুরু করা, বা টোস্ট দেওয়া বা একই পৃষ্ঠায় রেখে যাওয়ার অনুমতি দেয় তা করতে পারেন। DeviceToken ঘোষণা জন্য হিসাবে আপনি onCreate আগে ব্যক্তিগত স্ট্রিং deviceToken আপনার পৃষ্ঠার এটা ডিক্লেয়ার করতে পারেন
DragonFire

(আমার নিজের মন্তব্যটি আরও স্পষ্ট করতে: দুটি onSuccessটি আছে - আমি ভিতরেরটি উল্লেখ করছিলাম (যা খালি))
পিটার মর্টেনসেন

1

আপনার বিল্ড.gradle ফাইলটি পরিবর্তন করতে হবে এবং এতে ব্যবহৃত অ্যান্ড্রয়েড এসডিকে সংস্করণ যুক্ত করতে হবে:

implementation 'com.android.support:appcompat-v7:28.0.0'

এটি আমার ক্ষেত্রে কমনীয়তার মতো কাজ করেছিল।


0

আপনি যদি একের পর এক বিজ্ঞপ্তিগুলি দ্রুত প্রদর্শন করেন বা কোনও বিদ্যমানটি বাতিল করেন তবে বিজ্ঞপ্তিগুলি প্রদর্শিত নাও হতে পারে, ঠিক এখনই এটি আবার দেখান (যেমন চলমান বিজ্ঞপ্তির পরিবর্তনের বিষয়ে ব্যবহারকারীকে অবহিত করার জন্য একটি শীর্ষ-নোটিফিকেশন ট্রিগার করা)। এইসব ক্ষেত্রে সিস্টেম পারে ঠিক যখন মনে তারাও ব্যবহারকারী জন্য অপ্রতিরোধ্য / স্প্যামযুক্ত হতে পারে বিজ্ঞপ্তি ব্লক করার সিদ্ধান্ত নেন।

দয়া করে মনে রাখবেন, বাইরে থেকে কমপক্ষে স্টক এন্ড্রয়েডে (10 এর সাথে পরীক্ষিত) কিছুটা এলোমেলো দেখায়: এটি কখনও কখনও ঘটে এবং কখনও কখনও তা হয় না। আমার অনুমান, খুব অল্প সময়ের প্রান্তিক সময়কালে আপনি খুব বেশি বিজ্ঞপ্তি প্রেরণ করতে পারবেন না। কল করা NotificationManager.cancel()এবং তারপরে NotificationManager.notify()কখনও কখনও এই আচরণের কারণ হতে পারে।

আপনার যদি বিকল্প থাকে তবে কোনও বিজ্ঞপ্তি আপডেট করার আগে এটিকে বাতিল করবেন না, তবে কেবল NotificationManager.notify()আপডেট বিজ্ঞপ্তি দিয়ে কল করুন । এটি সিস্টেম দ্বারা উল্লিখিত অবরুদ্ধকরণকে ট্রিগার করে বলে মনে হচ্ছে না।


-1

আপনি যদি নোটিফিকেশন চ্যানেল ব্যবহার করার সময় সংস্করণ> = অ্যান্ড্রয়েড 8.1 (ওরিও) এ থাকেন তবে এর গুরুত্বটিকে উচ্চতায় সেট করুন:

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

1
"এক সংস্করণ> =" বলতে কী বোঝ ? আপনি কি "8.1 সংস্করণে (বা উপরে)" বলতে চান ? আপনার উত্তর সম্পাদনা করে প্রতিক্রিয়া জানান , এখানে মন্তব্যে নয় (যথাযথ হিসাবে)।
পিটার মর্টেনসেন

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