অ্যান্ড্রয়েডে কোনও পরিষেবা থেকে একটি বিজ্ঞপ্তি পাঠানো হচ্ছে


105

আমার একটি পরিষেবা চলছে এবং আমি একটি বিজ্ঞপ্তি পাঠাতে চাই। খুব খারাপ, বিজ্ঞপ্তি অবজেক্টের জন্য একটি দরকার Context, যেমন একটি Activity, এবং এ-এর মতো নয় Service

আপনি কি কোনও উপায় জানেন? আমি Activityপ্রতিটি বিজ্ঞপ্তির জন্য একটি তৈরি করার চেষ্টা করেছি তবে এটি কুৎসিত বলে মনে হচ্ছে এবং আমি কোনও Activityছাড়াই কোনও চালু করার উপায় খুঁজে পাচ্ছি না View


14
উম্মে ... একটি পরিষেবা হল একটি প্রসঙ্গ!
আইজ্যাক ওয়ালার 19

19
Godশ্বর, আমি যেমন একটি ডাম্বাস। ঠিক আছে, সবার সময় নষ্ট করার জন্য দুঃখিত।
ই-সন্তুষ্ট

28
এটি দুর্দান্ত - এটি গুগলের একটি ভাল প্রশ্ন।
আইজাক ওয়ালার

আপনার দ্বিতীয় মন্তব্যটি পছন্দ করুন: ডি: ডি
ফাইজান মুবাশ্বের

এই পোস্টটি সবেমাত্র আমার দিনটি রক্ষা করেছে ...
মুহাম্মদ ফয়জান

উত্তর:


109

উভয় Activityএবং Serviceআসলে extend Contextতাই আপনি কেবল thisনিজের Contextমধ্যে নিজের হিসাবে ব্যবহার করতে পারেন Service

NotificationManager notificationManager =
    (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
Notification notification = new Notification(/* your notification */);
PendingIntent pendingIntent = /* your intent */;
notification.setLatestEventInfo(this, /* your content */, pendingIntent);
notificationManager.notify(/* id */, notification);

4
মনে রাখবেন যে কোনও পরিষেবা থেকে বিজ্ঞপ্তি করতে আপনার অনেক সমস্যা হবে। আপনার যদি সমস্যা হয় তবে এই গোষ্ঠীগুলিতে
android-

1
আপনি কীভাবে নোটিফিকেশন.বিল্ডার ব্যবহার করে এটি করতে পারেন? কারণ সেটলেস্টেস্টেভেস্টইনফোর ইতিমধ্যে অবচয় করা হয়েছে।
কায়রি সান

77

নথি থেকে দেখা হিসাবে এই ধরণের বিজ্ঞপ্তি হ্রাস করা হয়:

@java.lang.Deprecated
public Notification(int icon, java.lang.CharSequence tickerText, long when) { /* compiled code */ }

public Notification(android.os.Parcel parcel) { /* compiled code */ }

@java.lang.Deprecated
public void setLatestEventInfo(android.content.Context context, java.lang.CharSequence contentTitle, java.lang.CharSequence contentText, android.app.PendingIntent contentIntent) { /* compiled code */ }

ভাল উপায়
আপনি এই মত একটি বিজ্ঞপ্তি পাঠাতে পারেন:

// prepare intent which is triggered if the
// notification is selected

Intent intent = new Intent(this, NotificationReceiver.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

// build notification
// the addAction re-use the same intent to keep the example short
Notification n  = new Notification.Builder(this)
        .setContentTitle("New mail from " + "test@gmail.com")
        .setContentText("Subject")
        .setSmallIcon(R.drawable.icon)
        .setContentIntent(pIntent)
        .setAutoCancel(true)
        .addAction(R.drawable.icon, "Call", pIntent)
        .addAction(R.drawable.icon, "More", pIntent)
        .addAction(R.drawable.icon, "And more", pIntent).build();


NotificationManager notificationManager = 
  (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

notificationManager.notify(0, n); 


উপরের সেরা উপায় কোডটির ন্যূনতম এপিআই স্তর 11 (অ্যান্ড্রয়েড 3.0) প্রয়োজন।
যদি আপনার ন্যূনতম এপিআই স্তরটি 11 এর চেয়ে কম হয়, আপনার উচিত লাইব্রেরির বিজ্ঞপ্তি কমপ্যাট ক্লাসটি সমর্থন করা

সুতরাং আপনার সর্বনিম্ন টার্গেটের এপিআই স্তরটি যদি 4+ হয় (অ্যান্ড্রয়েড 1.6+) এটি ব্যবহার করুন:

    import android.support.v4.app.NotificationCompat;
    -------------
    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.mylogo)
                    .setContentTitle("My Notification Title")
                    .setContentText("Something interesting happened");
    int NOTIFICATION_ID = 12345;

    Intent targetIntent = new Intent(this, MyFavoriteActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(contentIntent);
    NotificationManager nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    nManager.notify(NOTIFICATION_ID, builder.build());

4
এটি সেরা উত্তর হওয়া উচিত যেহেতু গৃহীত একটিকে
অবহেলা

4
@ মার্সেলক্রাইভকে মনে হয় যে তিনি বা তিনি তাদের উত্স উদ্ধৃত করতে "ভুলে গেছেন"। vogella.com
টিউটোরিয়ালস /

"নোটিফিকেশন রিসিভার" কী?
ব্যবহারকারী 3690202

"নোটিফিকেশন রিসিভার" হ'ল ক্রিয়াকলাপ যা বিজ্ঞপ্তি দ্বারা খোলা হবে। @ স্টারওয়াইন্ড 0 সরবরাহিত লিঙ্কটি দেখুন।
জর্জ থিওডোরাকিস

নোটিফিকেশন কমপ্যাট.বিল্ডার ইতিমধ্যে অবমূল্যায়ন করেছেন। এটি এখন আর সেরা উত্তর নেই
শয়তানের স্বপ্ন

7
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void PushNotification()
{
    NotificationManager nm = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);
    Notification.Builder builder = new Notification.Builder(context);
    Intent notificationIntent = new Intent(context, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(context,0,notificationIntent,0);

    //set
    builder.setContentIntent(contentIntent);
    builder.setSmallIcon(R.drawable.cal_icon);
    builder.setContentText("Contents");
    builder.setContentTitle("title");
    builder.setAutoCancel(true);
    builder.setDefaults(Notification.DEFAULT_ALL);

    Notification notification = builder.build();
    nm.notify((int)System.currentTimeMillis(),notification);
}

বিষয়টির প্রশ্নটি কোনও পরিষেবা নয় যা ক্রিয়াকলাপ নয়
ডুনা

1

ভাল, আমি নিশ্চিত না যে আমার সমাধানটি সর্বোত্তম অনুশীলন কিনা। NotificationBuilderআমার কোডটি ব্যবহার করা দেখতে দেখতে দেখতে এমন দেখাচ্ছে:

private void showNotification() {
    Intent notificationIntent = new Intent(this, MainActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(
                this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(contentIntent);
    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICATION_ID, builder.build());
    }

সুস্পষ্ট:

    <activity
        android:name=".MainActivity"
        android:launchMode="singleInstance"
    </activity>

এবং এখানে পরিষেবা:

    <service
        android:name=".services.ProtectionService"
        android:launchMode="singleTask">
    </service>

সত্যিই কোন singleTaskএ আছে কিনা আমি জানি না Serviceতবে এটি আমার অ্যাপ্লিকেশনটিতে সঠিকভাবে কাজ করে ...


এই মধ্যে নির্মাতা কি?
বিশ্বনাথ লেকশ্মানন

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