6

जब मैं अपनी अधिसूचना में कोड mNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource( getResources(), R.drawable.ic_large_icon)); जोड़ता हूं तो यह त्रुटियों या चेतावनियों के बिना काम करना बंद कर देता है। यह केवल लॉलीपॉप पर प्री-लॉलीपॉप पर होता है और इससे परे यह बहुत अच्छा काम करता है। और "काम" के साथ मेरा मतलब है कि अधिसूचना दिखाई देती है।अधिसूचना कॉम्पेट.बिल्डर सेट LargeIcon() काम नहीं कर रहा है?

मेरे नमूना कोड:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 

mBuilder.setSmallIcon(R.drawable.icon); 
mBuilder.setContentTitle("Content Title"); 
mBuilder.setContentText("Content Text"); 
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_large_icon)); 

startForeground(1, mBuilder.build()); 

मैं अलग अलग तरीकों से बिटमैप लोड करने का प्रयास किया है, लेकिन वह असफल रहता है ... आइकन 128x128 है, इसलिए यह के आकार एक समस्या नहीं होनी चाहिए?

मैंने अलग-अलग आईडी की भी कोशिश की है लेकिन कोई भी समस्या हल नहीं करता है।

मैं किसी भी सलाह का इतना बड़ा होगा, कृपया सही दिशा में कोई भी धक्का मेरे लिए दुनिया का मतलब होगा।

संपादित करें 1 #

यह सूचना एक सेवा से जारी किया जाता है। सेवा जिंदा है और लॉग प्रिंट मुझे बताते हैं कि "startForeground()" के बाद कोड चलाया जाता है।

+0

"आइकन 128x128 है, इसलिए यह के आकार एक समस्या नहीं होनी चाहिए?" - क्या आपके पास इस निर्देशिका में निर्देशिका (या निर्देशिका) है? – CommonsWare

+0

Res/drawable, विभिन्न उप-निर्देशिकाओं में एकाधिक संकल्पों को रखने के लिए एंड्रॉइड एसेट स्टूडियो (रोमन द्वारा) का उपयोग करने का भी प्रयास किया। लेकिन यह या तो मदद नहीं की। क्या कोई संभावना है कि यह कहां मायने रखता है? "startForeground()" के बजाय नियमित अधिसूचना प्रबंधक वर्ग का उपयोग करने का प्रयास करने के लिए जा रहे हैं, लेकिन अगर यह समस्या का कारण था तो यह अजीब होगा। –

+0

'res/drawable /' लगभग सही जवाब नहीं है। यह 'res/drawable-mdpi /' के लिए समानार्थी है, और इसलिए आपकी छवि को उच्च-घनत्व वाले उपकरणों पर upscaled किया जाएगा। तो, वास्तव में उच्च घनत्व वाले उपकरणों पर, 128x128 पर शुरू की गई छवि 512x512 पर चढ़ सकती है, जिस बिंदु पर आप 1 एमबी आईपीसी लेनदेन आकार सीमा से पहले उड़ जाएंगे। आप 'बिटमैप' को देखना चाहते हैं कि आप 'डीकोड रिसोर्स()' से वापस आ रहे हैं। – CommonsWare

उत्तर

11

आपको पहले बड़े आइकन को छोटा आइकन सेट करना होगा।

मेरे मामले में इस कोड काम कर रहा है:

mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_message)); 
    mBuilder.setSmallIcon(R.mipmap.ic_message); 
    mBuilder.setContentTitle("Inbox"); 
    mBuilder.setContentText("New message received"); 
+2

मेरे लिए काम नहीं किया – vgarzom

+0

@vgarzom क्या आपको कोई समाधान मिला? यह मेरे लिए भी काम नहीं कर रहा है –

2

Lolipop से पहले सूचनाओं के लिए कोई बड़ा प्रतीक था। छोटा आइकन 64x64 होना चाहिए और इसे बनाए रखने के दौरान इसे दो रंगों में प्रस्तुत किया जाएगा: सफेद और पारदर्शी।

NotificationCompat.Builder mBuilder; 

if (SystemTools.isAndroidApiVersionBeforeLollipop()) { 
       mBuilder = 
         new NotificationCompat.Builder(context) 
           .setContentIntent(pendingIntent) 
           .setSmallIcon(iconRid) 
           .setColor(ContextCompat.getColor(context, R.color.transparent)) 
           .setContentTitle(caption) 
           .setContentText(text) 
           .setOngoing(true) 
           .setWhen(0) 
           .setPriority(NotificationCompat.PRIORITY_LOW) 
       ; 
      } else { 
       mBuilder = 
         new NotificationCompat.Builder(context) 
           .setContentIntent(pendingIntent) 
           .setSmallIcon(iconRid) 
           .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), bigIconRid)) 
           .setColor(ContextCompat.getColor(context, R.color.transparent)) 
           .setContentTitle(caption) 
           .setContentText(text) 
           .setOngoing(true) 
           .setWhen(0) 
           .setPriority(NotificationCompat.PRIORITY_LOW) 
       ; 

}

संबंधित मुद्दे