একটি অ্যান্ড্রয়েড বিজ্ঞপ্তি শব্দ কীভাবে খেলবেন


169

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

MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();

উত্তর:


421

যদি এখনও কেউ এর সমাধান খুঁজছেন তবে অ্যান্ড্রয়েডে রিংটোন / অ্যালার্ম শব্দটি কীভাবে খেলবেন তার একটি উত্তর পেয়েছি

try {
    Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
    r.play();
} catch (Exception e) {
    e.printStackTrace();
}

আপনি TYPE_NOTIFICATION কে TYPE_ALARM এ পরিবর্তন করতে পারেন, তবে আপনি আপনার রিংটোন আর এটি বাজানো বন্ধ রাখতে ট্র্যাক রাখতে চাইবেন ... বলুন, যখন ব্যবহারকারী কোনও বোতাম বা কোনও কিছু ক্লিক করেন।


2
উদাহরণস্বরূপ মটোরোলা ফোনগুলি পছন্দগুলি ক্রিয়াকলাপটি প্রসারিত করে এবং ব্যবহারকারীকে এসএমএস এবং অন্যান্য বিভাগগুলির জন্য একটি নোটিফিকেশন শব্দ নির্ধারণ করতে দেয় allows উপরের পদ্ধতিটি এই ধরণের ফোনগুলির সাথে কাজ করবে না। কীভাবে এই সমস্যাটি সমাধান করবেন আপনার কোনও ধারণা আছে?
ডেভিড

2
আমি এই সাথে একটি ত্রুটি করেছেন: MediaPlayer - Should have subtitle controller already set। এর মানে কী?
Deqing

এই সমাধানটি ব্যবহার করে, 28/29 বারের পরে, শব্দগুলি বাজানো বন্ধ করে দেয়। কেউ জানে কেন?
টম ব্রিংক্যাম্পার

1
কেন আপনি প্রতিটি ব্যতিক্রম ধরেন? কোনটি নিক্ষেপ করা যেতে পারে?
মিহা_এক্স 64৪

2
@ স্যাম, হ্যাঁ stackoverflow.com/q/39876885/2614353.Basicly , একটি রিংটোন বস্তুর সব আপনি বাজাতে তৈরি করবেন না। এটি একবার তৈরি করুন এবং তারপরে একই বস্তুটি একাধিক বার খেলুন।
টম ব্রিংকম্পার

205

আপনি এখন শব্দটি আলাদা করে কল করার চেয়ে কোনও বিজ্ঞপ্তি তৈরি করার সময় শব্দটি অন্তর্ভুক্ত করে এটি করতে পারেন।

//Define Notification Manager
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

//Define sound URI
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext())
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(message)
        .setSound(soundUri); //This sets the sound to play

//Display notification
notificationManager.notify(0, mBuilder.build());

12
এটি একটি পৃথক সমস্যা সমাধান করে - "কীভাবে কোনও বিজ্ঞপ্তি শব্দটি প্লে করতে হবে" নয়, "কীভাবে একটি বিজ্ঞপ্তি প্লে করতে হবে এবং একটি শব্দ প্রদর্শন করবে"। গৃহীত উত্তরটি এর সমাধানে ন্যায়সঙ্গত।
ফ্যাবিয়ান ট্যাম্প

7
সম্ভবত আপনার এটিকে STREAM_NOTIFICATION এর মাধ্যমে খেলতে সেট করা উচিত যাতে এটি ওএসের বর্তমান বিজ্ঞপ্তি ভলিউম পছন্দ: খেলা সেট (সাউন্ডইরি, অডিওম্যানেজ.এসটিআরইম_নোটাইফিকেশন)
এমডব্লিউ

@ রব রিডল এটি ভাল কাজ করছে। তবে একাধিক বিজ্ঞপ্তিগুলির ক্ষেত্রে যেমন 100 টি বিজ্ঞপ্তি সমান্তরাল শব্দটি পরবর্তী নোটিফিকেশন শব্দের সাথে মিশে যায়। যৌক্তিকভাবে যদি শব্দটি ইতিমধ্যে প্লে হয় তবে এটি আগের প্লেটি শেষ হওয়ার জন্য অপেক্ষা করা উচিত। আপনি কি এই পরিস্থিতিতে সাহায্য করতে পারেন?
ওয়াকাস আলী রাজ্জাক

অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় শব্দটি বাজানো নয়। যেকোনো পরামর্শ?
সাগর নায়ক

47

আপনি যদি চান কোনও ডিফল্ট বিজ্ঞপ্তির শব্দ বাজানো হয় তবে আপনি শ্রেণির সেটডেফল্টস (ইনট) পদ্ধতিটি ব্যবহার করতে পারেন NotificationCompat.Builder:

NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle(getString(R.string.app_name))
                .setContentText(someText)
                .setDefaults(Notification.DEFAULT_SOUND)
                .setAutoCancel(true);

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


অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় শব্দটি বাজানো নয়। যেকোনো পরামর্শ?
সাগর নায়ক

13

এটা চেষ্টা কর:

public void ringtone(){
    try {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
        r.play();
     } catch (Exception e) {
         e.printStackTrace();
     }
}

9

আপনার প্রশ্নের পরে কিছুক্ষণ হয়েছে, কিন্তু ... আপনি কি অডিও স্ট্রিমের প্রকারটি সেট করার চেষ্টা করেছেন?

mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

এটি প্রস্তুত করার আগে করা উচিত।


2

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

যাইহোক, বিজ্ঞপ্তি এপিআই এর সামান্য টুইট এবং আপনি যা চান তার কাছাকাছি যেতে পারেন। আপনি একটি ফাঁকা বিজ্ঞপ্তি প্রদর্শন করতে পারেন এবং তারপরে এটি কয়েক সেকেন্ড পরে স্বয়ংক্রিয়ভাবে সরিয়ে ফেলতে পারেন। আমি মনে করি এটি আমার পক্ষে কাজ করবে; হয়তো এটা আপনার জন্য কাজ করবে.

আমি সুবিধার পদ্ধতিগুলির একটি সেট তৈরি করেছি com.globalmentor.android.app.Notifications.javaযাতে আপনাকে এই জাতীয় বিজ্ঞপ্তির শব্দ তৈরি করতে দেয়:

Notifications.notify(this);

এলইডি ফ্ল্যাশ করবে এবং আপনার কাছে ভাইব্রের অনুমতি থাকলে একটি কম্পন ঘটবে। হ্যাঁ, একটি বিজ্ঞপ্তি আইকনটি বিজ্ঞপ্তি বারে উপস্থিত হবে তবে কয়েক সেকেন্ড পরে অদৃশ্য হয়ে যাবে।

এই মুহুর্তে আপনি বুঝতে পারবেন যেহেতু বিজ্ঞপ্তি যেভাবেই চলে যাবে, আপনার বিজ্ঞপ্তি বারে একটি স্ক্রলিং টিকার বার্তাও থাকতে পারে; আপনি এটি এইভাবে করতে পারেন:

Notifications.notify(this, 5000, "This text will go away after five seconds.");

এই ক্লাসে আরও অনেক সুবিধাজনক পদ্ধতি রয়েছে। আপনি পুরো গ্রন্থাগারটি এর সাবভার্সন সংগ্রহশালা থেকে ডাউনলোড করতে পারেন এবং মাভেনের সাহায্যে এটি তৈরি করতে পারেন। এটি গ্লোবালমেন্টর-কোর লাইব্রেরির উপর নির্ভর করে, যা মাভেনের সাথেও নির্মিত এবং ইনস্টল করা যেতে পারে।


সহজভাবে একটি শব্দ বাজানো জটিল way : আপনি শুধু এই কাজ করতে পারে stackoverflow.com/a/9622040/1417267
slinden77

1

আপনি চান বিজ্ঞপ্তি প্রদর্শন করতে আপনি বিজ্ঞপ্তি এবং নোটিফিকেশন ম্যানেজার ব্যবহার করতে পারেন। এরপরে আপনি আপনার বিজ্ঞপ্তিটি দিয়ে যে শব্দটি খেলতে চান তা কাস্টমাইজ করতে পারেন।


5
আমি কোনও বিজ্ঞপ্তি প্রদর্শন করতে চাই না, আমি কেবল শব্দটি খেলতে চাই।
নিনজাসনেসে

1

আমি মনে করি অ্যান্ড্রয়েড ইউআইয়ের জন্য "বিজ্ঞপ্তি শব্দ" ধারণাটি কোনওভাবেই ভুল way

অ্যান্ড্রয়েড প্রত্যাশিত আচরণটি ব্যবহারকারীকে সতর্ক করতে স্ট্যান্ডার্ড নোটিফিকেশন ব্যবহার করা। আপনি যদি স্ট্যাটাস বারের আইকন ছাড়াই কোনও বিজ্ঞপ্তির শব্দটি বাজান, আপনি ব্যবহারকারীকে বিভ্রান্ত করতে পারেন ("কী শব্দ ছিল? এখানে কোনও আইকন নেই, সম্ভবত আমার শোনার সমস্যা আছে?")।

কোনও বিজ্ঞপ্তিতে শব্দ কীভাবে সেট করা যায় তা উদাহরণস্বরূপ, এখানে: বিজ্ঞপ্তির জন্য শব্দ নির্ধারণ করা


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

ঠিক আছে, আপনি ঠিক বলেছেন তবে এটি অন্য জিনিস। আমি "সিস্টেমের বিজ্ঞপ্তি শোনায়" এর কথা বলছিলাম (ধরে নিলাম এটিই প্রশ্নটির বিষয় ছিল), এটি সিস্টেম অ্যান্ড্রয়েড জিইউআইতে রয়েছে। অবশ্যই আপনি যখন নিজের অ্যাপ্লিকেশনটিতে থাকবেন তখন ঠিক তেমনি।
01

1
Intent intent = new Intent(this, MembersLocation.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("type",type);
    intent.putExtra("sender",sender);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    String channelId = getString(R.string.default_notification_channel_id);

    Uri Emergency_sound_uri=Uri.parse("android.resource://"+getPackageName()+"/raw/emergency_sound");
   // Uri Default_Sound_uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    if(type.equals("emergency"))
    {
        playSound=Emergency_sound_uri;
    }
    else
    {
        playSound= Settings.System.DEFAULT_NOTIFICATION_URI;
    }

    NotificationCompat.Builder notificationBuilder =
            new NotificationCompat.Builder(this, channelId)
                    .setSmallIcon(R.drawable.ic_notification)
                    .setContentTitle(title)
                    .setContentText(body)
                    .setSound(playSound, AudioManager.STREAM_NOTIFICATION)
                    .setAutoCancel(true)
                    .setColor(getColor(R.color.dark_red))
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setContentIntent(pendingIntent);

   // notificationBuilder.setOngoing(true);//for Android notification swipe delete disabling...

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

    // Since android Oreo notification channel is needed.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId,
                "Channel human readable title",
                NotificationManager.IMPORTANCE_HIGH);
        AudioAttributes att = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
                .build();
        channel.setSound(Emergency_sound_uri, att);
        if (notificationManager != null) {
            notificationManager.createNotificationChannel(channel);
        }
    }

    if (notificationManager != null) {
        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
}

1
এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত, তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান এবং এটি ভবিষ্যতের পাঠকদের আরও অন্যান্য অনুরূপ প্রশ্নের সাথে আরও দরকারী করে তুলে ধরে তার দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নত করবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
নোহস 13

0

বিজ্ঞপ্তি চ্যানেলে শব্দ সেট করুন

        Uri alarmUri = Uri.fromFile(new File(<path>));

        AudioAttributes attributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_ALARM)
                .build();

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