অ্যান্ড্রয়েডে বিজ্ঞপ্তিগুলিতে কীভাবে বোতাম যুক্ত করবেন?


85

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

আমি ব্যবহারকারীর হোম স্ক্রিনে একটি উইজেট রাখার পরিকল্পনা করছি না, কেবলমাত্র বিজ্ঞপ্তিগুলিতে। কিভাবে আমি এটি করতে পারব?


সেক্ষেত্রে আমি দুঃখিত
স্প্যানিশ

62
আমি মনে করি এটি একটি বৈধ প্রশ্ন
শিকারী

7
এটি কীভাবে বৈধ প্রশ্ন নয়?
রাদু

4
কিছু লোক কেবল অর্থবহ প্রশ্নগুলিকেই নীচে

7
এটি আমার গুগল অনুসন্ধানে কোনও শীর্ষ ফলাফল এবং কোনও উত্তর নেই ...
বেন

উত্তর:


12

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

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

পড়ুন দয়া করে অ্যান্ড্রয়েড ডকুমেন্টেশন


আপনার উত্তরটি উন্নত করতে আপনি আইকন ছাড়াই "পাঠ্য" যুক্ত করবেন। ইন্টেন্ট তৈরির জন্য পিপিলে ওরোভাইড উপায়, বিজ্ঞপ্তি অঞ্চলে আইকন বোতাম যুক্ত করুন এবং উভয়কেই যুক্ত করুন, তারপরে কীভাবে উদ্দেশ্যটি পাবেন receive
তাবেবকেনা

8

বিজ্ঞপ্তিতে ক্রিয়া বোতাম যুক্ত করুন

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder mBuilder = new 
NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

আরও তথ্যের জন্য https://developer.android.com/training/notify-user/build-notifications.html দেখুন


আপনার উত্তরটি উন্নত করতে আপনি আইকন ছাড়াই "পাঠ্য" যুক্ত করবেন। উদ্দেশ্যটি তৈরি করার জন্য পিপিলে ওরোভাইড উপায়ে নোটিফিকেশন এরিয়াতে আইকন বোতাম যুক্ত করুন এবং উভয়কেই যুক্ত করুন।
তাবেবকেনা

"যোগ করুন অ্যাকশন বোতাম" এর মধ্যে নোটিফিকেশন সামগ্রীর নীচে বোতামটি যুক্ত করবে।
তাবেবকেনা

4

আমি যে সমাধানটি ব্যবহার করেছি সেগুলি সরবরাহ করার চেষ্টা করব এবং বেশিরভাগ সংগীত প্লেয়ার বিজ্ঞপ্তি বারে প্লেয়ার নিয়ন্ত্রণগুলি দেখানোর জন্য একই কৌশলটি ব্যবহার করে।

আমি একটি পরিষেবা চালাচ্ছি যা মিডিয়া প্লেয়ার এবং এর সমস্ত নিয়ন্ত্রণ পরিচালনা করতে ব্যবহৃত হয়। ক্রিয়াকলাপের ব্যবহারকারী নিয়ন্ত্রণ উদাহরণস্বরূপ পরিষেবাগুলিতে প্রেরণ করে পরিষেবার সাথে যোগাযোগ করে

 Intent i = new Intent(MainActivity.this, MyRadioService.class);
        i.setAction(Constants.Player.ACTION_PAUSE);

        startService(i);

ইন্টেন্টগুলি গ্রহণ করতে এবং পরিষেবা শ্রেণিতে ক্রিয়া সম্পাদনের জন্য আমি পরিষেবাটির অন স্টার্ট কম্যান্ড পদ্ধতিতে নিম্নলিখিত কোড ব্যবহার করছি

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {


    if (intent.getAction().equals(Constants.Player.ACTION_PAUSE)) {
        if(mediaPlayer.isPlaying()) {
            pauseAudio();
        }
    }

এখন আপনার প্রশ্নের সঠিক উত্তর খেলতে নিয়ন্ত্রণের সাথে বিজ্ঞপ্তি প্রদর্শন করতে। নিয়ন্ত্রণ সহ বিজ্ঞপ্তি দেখানোর জন্য আপনি নিম্নলিখিত পদ্ধতিগুলিতে কল করতে পারেন।

   //    showNotification
private void startAppInForeground() {
//  Start Service in Foreground

    // Using RemoteViews to bind custom layouts into Notification
    RemoteViews views = new RemoteViews(getPackageName(),
            R.layout.notification_status_bar);

// Define play control intent 
   Intent playIntent = new Intent(this, MyRadioService.class);
    playIntent.setAction(Constants.Player.ACTION_PLAY);

// Use the above play intent to set into PendingIntent
    PendingIntent pplayIntent = PendingIntent.getService(this, 0,
            playIntent, 0);

// binding play button from layout to pending play intent defined above 
views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);
views.setImageViewResource(R.id.status_bar_play,
            R.drawable.status_bg);

Notification status = null;
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        status = new Notification.Builder(this).build();
    }

  status.flags = Notification.FLAG_ONGOING_EVENT;
    status.icon = R.mipmap.ic_launcher;
    status.contentIntent = pendingIntent;
    startForeground(Constants.FOREGROUND_SERVICE, status);

} আশা করি এটি আপনাকে সত্যই সহায়তা করবে। এবং আপনি যা চান তা অর্জন করতে সক্ষম হবেন। একটি শুভ কোডিং আছে :)


4
আমি চেষ্টা করিনি। তবে এটি ব্যবহারকারীর ক্ষেত্রে একমাত্র completeউত্তর বলে মনে হচ্ছে fit
তাবেবকেনা

4
    // It shows buttons on lock screen (notification).

Notification notification = new Notification.Builder(context)
    .setVisibility(Notification.VISIBILITY_PUBLIC)
    .setSmallIcon(R.drawable.NotIcon)
    .addAction(R.drawable.ic_prev, "button1",ButtonOneScreen) 
    .addAction(R.drawable.ic_pause, "button2", ButtonTwoScreen)  
   .....
    .setStyle(new Notification.MediaStyle()
    .setShowActionsInCompactView(1)
    .setMediaSession(mMediaSession.getSessionToken())
    .setContentTitle("your choice")
    .setContentText("Again your choice")
    .setLargeIcon(buttonIcon)
    .build();

আরও তথ্যের জন্য দয়া করে এখানে ক্লিক করুন


1

আমি মনে করি যে পাশে Ankit Guptaউত্তর, আপনি ব্যবহার করতে পারেন MediaSession নেটিভ যোগ করার জন্য (API এর> 21) mediaController মতবাদ:

notificationBuilder
        .setStyle(new Notification.MediaStyle()
            .setShowActionsInCompactView(new int[]{playPauseButtonPosition})  // show only play/pause in compact view
            .setMediaSession(mSessionToken))
        .setColor(mNotificationColor)
        .setSmallIcon(R.drawable.ic_notification)
        .setVisibility(Notification.VISIBILITY_PUBLIC)
        .setUsesChronometer(true)
        .setContentIntent(createContentIntent(description)) // Create an intent that would open the UI when user clicks the notification
        .setContentTitle(description.getTitle())
        .setContentText(description.getSubtitle())
        .setLargeIcon(art);

সূত্র: টিউটোরিয়াল

আপনি অন্যথায় কাস্টম ভিউ তৈরি করতে এবং এটি সূক্ষ্ম অঞ্চলটিতে প্রদর্শন করতে পারেন, এখানে প্রথম উত্তরটি দুর্দান্ত।


1

অ্যান্ড্রয়েড পাই সহ পরীক্ষিত, ওয়ার্কিং কোড। এই সমস্ত একই পরিষেবা বর্গ ভিতরে যান।

একটি বিজ্ঞপ্তি দেখান:

public void setNotification() {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    {
    NotificationChannel channel = new NotificationChannel("a", "status", NotificationManager.IMPORTANCE_DEFAULT);
    channel.setDescription("notifications");
    notificationManager = getSystemService(NotificationManager.class);
    notificationManager.createNotificationChannel(channel);

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


Receiver.service = this;
Notification.MediaStyle style = new Notification.MediaStyle();

notification = new Notification.Builder(this)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle("Notification")
        .addAction(R.drawable.close_icon,  "quit_action", makePendingIntent("quit_action"))
        .setStyle(style);

style.setShowActionsInCompactView(0);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    {
    notification.setChannelId("a");
    }

// notificationManager.notify(123 , notification.build()); // pre-oreo
startForeground(126, notification.getNotification());
}

সহায়ক ফাংশন:

public PendingIntent makePendingIntent(String name)
    {
    Intent intent = new Intent(this, FloatingViewService.Receiver.class);
    intent.setAction(name);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    return pendingIntent;
    }

ক্রিয়াগুলি পরিচালনা করতে:

static public class Receiver extends BroadcastReceiver {
static FloatingViewService service;

@Override
public void onReceive(Context context, Intent intent)
    {

    String whichAction = intent.getAction();

    switch (whichAction)
        {

        case "quit_action":
            service.stopForeground(true);
            service.stopSelf();
            return;

        }

    }
}

আপনাকে আপনার ম্যানিফেস্টও আপডেট করতে হবে:

<receiver android:name=".FloatingViewService$Receiver">
        <intent-filter>
            <action android:name="quit_action" />
        </intent-filter>
    </receiver>

1

আপনি নীচের মত বাটন যুক্ত করতে পারেন এবং নীচে যেমন আমার জন্য কাজ করেছি সেই বোতামটিতে ক্রিয়া সম্পাদন করতে পারেন দয়া করে পরীক্ষা করুন।

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.ic_logo)
                        .setAutoCancel(true)
                        .setContentTitle(name)
                        .setContentText(body)
                        .setGroupSummary(true)
                        .addAction(android.R.drawable.ic_menu_directions, "Mark as read", morePendingIntent);

// আরোপেন্ডিংএন্টেন্ট (আপনার স্টাফ করুন)

  PendingIntent morePendingIntent = PendingIntent.getBroadcast(
                        this,
                        REQUEST_CODE_MORE,
                        new Intent(this, NotificationReceiver.class)
                                .putExtra(KEY_INTENT_MORE, REQUEST_CODE_MORE)
                                .putExtra("bundle", object.toString()),
                        PendingIntent.FLAG_UPDATE_CURRENT
                );

0

আমি জানি না এটি সঠিক উপায় কিনা বা না, তবে এটি কার্যকর হয়।

  1. BroadCastReceiverবোতাম টিপলে ডেটা পাওয়ার জন্য একটি ক্লাস তৈরি করুন ।
public class MyBroadCastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        
        String log = "URI: " + intent.toUri(Intent.URI_INTENT_SCHEME);
        Log.d("my", "LOG:::::::" + log);
    }
}
  1. এখন আপনি যে কোনও ক্রিয়াকলাপে যেখানে বিজ্ঞপ্তি তৈরি করতে চান -
 Intent intent = new Intent();
        intent.setAction("unique_id");
        intent.putExtra("key", "any data you want to send when button is pressed");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0);
  1. আপনি বিজ্ঞপ্তিটি তৈরি করার সময় এখন এই মুলতুবি উদ্দেশ্যটি ব্যবহার করুন এবং শেষ পর্যন্ত মাইবারডকাস্টারসিভার ক্লাসে এটি পেতে আপনাকে এই সম্প্রচারটি নিবন্ধভুক্ত করতে হবে।
BroadcastReceiver br = new MyBroadCastReceiver();
        IntentFilter filter = new IntentFilter("unique_id");
        registerReceiver(br, filter);

এখন আপনি যদি বোতামটি টিপে কিছু নির্দিষ্ট কাজ করতে চান, আপনি ক্লাসে onReceive()পদ্ধতিতে এটি করতে পারেন MyBroadCastReceiver

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