অ্যান্ড্রয়েডে রিংটোন / অ্যালার্ম শব্দ কীভাবে খেলবেন


119

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

আমি একটি বোতাম টিপুন এবং আমি একটি রিংটোন / অ্যালার্ম শব্দ খেলতে চাই। আমি একটি সহজ, সহজ সরল নমুনা খুঁজে পাইনি। হ্যাঁ, আমি ইতিমধ্যে অ্যালার্ম ক্লক উত্স কোডটি দেখেছি ... তবে এটি সোজা নয় এবং আমি এটি সংকলন করতে পারি না।

আমি এই কাজটি করতে পারি না:

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, alert);
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
    player.setAudioStreamType(AudioManager.STREAM_ALARM);
    player.setLooping(true);
    player.prepare();
    player.start();
}

আমি এই ত্রুটি পেয়েছি:

04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for
content://settings/system/ringtone

সুতরাং .. দয়া করে যদি কেউ ডিফল্ট রিংটোন / অ্যালার্ম কীভাবে খেলতে হয় তা আমাকে জানান।

আমি কোনও ফাইল আপলোড না করা পছন্দ করি। কেবল একটি ডিফল্ট রিংটোন প্লে করুন।

উত্তর:


186

আপনি কেবল এটির সাথে একটি সেট করা রিংটোন খেলতে পারেন:

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();

আমি এখনও একটি ত্রুটি পেয়েছি - রিংটোন সামগ্রী খুলতে ব্যর্থ: // সেটিংস / সিস্টেম / বিপদাশঙ্কা
দেশাই

3
সুন্দর এবং সহজ। তবে, ডিভাইসের উপর নির্ভর করে, এই পদ্ধতিটি অ্যান্ড্রয়েডে প্লে হতে পারে এমন অন্যান্য শব্দগুলিকে (যেমন সংগীতের) বাধা দিতে পারে।
igordc

GetApplicationContext () ব্যবহার করা খুব ভাল বিকল্প নাও হতে পারে। এখানে আরও তথ্য: স্ট্যাকওভারফ্লো.com
সায়েত

@ বার্টসিম্পসন আপনি কীভাবে সমস্যার সমাধান করেছেন তা এই ত্রুটিটি পেয়ে
যাচ্ছেন

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

65

যদি কোনও ব্যবহারকারী তাদের ফোনে কখনই অ্যালার্ম সেট না করে থাকে, তবে TYPE_ALARM টি বাতিল করতে পারে। আপনি এর সাথে অ্যাকাউন্ট করতে পারেন:

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);

if(alert == null){
    // alert is null, using backup
    alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    // I can't see this ever being null (as always have a default notification)
    // but just incase
    if(alert == null) {  
        // alert backup is null, using 2nd backup
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);                
    }
}

1
ইউআরআই ফিরিয়ে দেওয়া হতে পারে nullযদিও এটি কোনও বৈধ সাউন্ডের দিকে ইঙ্গিত করে না। পরিবর্তে / পাশাপাশি ভাল- এর RingtoneManager.getRingtone()জন্য ফেরতের মানটি পরীক্ষা করা উচিতnull
আটটিলা

2017 সালে, বেজে উঠতে ব্যর্থ হয়ে কাজ করছে না। আপনার কি সাম্প্রতিক অ্যান্ড্রয়েডে এটি কাজ করছে?

55

আমি এইভাবেই করেছি:

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), notification);
mp.start();

এটি মার্কভ ২০০ এর মতোই, তবে রিংটনের পরিবর্তে মিডিয়াপ্লেয়ার ব্যবহার করে যা সংগীতের মতো অন্য শব্দগুলিকে বাধা দেয় যা ইতিমধ্যে পটভূমিতে প্লে হতে পারে।


5
আমি উপরের উত্তরটি চেষ্টা করেছি (রিংটোন.প্লে) তবে শব্দটি বন্ধ হয়ে যেতে পারে। আমি এই পদ্ধতির ব্যবহার করেছি এবং এটি পুরোপুরি কার্যকর হয়েছিল।
wyz

1
এটি তাদের অ্যাপ্লিকেশনটিতে অন্য যে কোনও অডিও উপাদান ব্যবহার করছে তার পক্ষে এটি আরও ভাল সমাধান।
EntangledLoops

@ ইউয়াম ইউয়াম, আমি কেবল পরীক্ষা করেছি এবং এটি কার্যকর হয়। আমি আমার সেটঅনক্লিকলিস্টনে উপরের কোডটি স্থাপন করা ছাড়া কিছুই করিনি। আপনি কি করেছিলেন?
ফিচার আকাশ

17

আপনার উদাহরণটি মূলত যা আমি ব্যবহার করছি। এটি এমুলেটরটিতে কখনই কাজ করে না, কারণ এমুলেটরটির ডিফল্টরূপে কোনও রিংটোন content://settings/system/ringtoneনেই , এবং খেলতে সক্ষম কোনও কিছুর সমাধান করে না। এটি আমার আসল ফোনে কাজ করে।


11

এটি সূক্ষ্মভাবে কাজ করে:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
MediaPlayer thePlayer = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

try {
    thePlayer.setVolume((float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)),
                        (float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)));
} catch (Exception e) {
    e.printStackTrace();
}

thePlayer.start();

2
আপনি কেন ভলিউমটি 7.0 দ্বারা ভাগ করছেন? এটি সাধারণভাবে পরিচিত কাজের মান বা এমন কিছু যা আপনি নিজেকে খনন করেন?
এরগো_404

আমি যা কিছু খনন করেছিলাম ...: ডি
কামরান আহমেদ

আপনি ফ্লোট.পার্সফ্লোট (ডাবল.টোস্ট্রিং (....)) কেন করেন ?? আপনি একটি ডাবল-> ফ্লোট রূপান্তর চান বলে একটি স্ট্রিং উদাহরণ দিয়ে যাচ্ছেন? তুমি কেন এটা করো?
জোর্ডিড

1
এই ভাগে অপ্রয়োজনীয় Uri.parse (RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION)), getDefaultUri () কোনো URI আসতে ইতিমধ্যে এটা এখনো বিশ্লেষণ করতে কোন প্রয়োজন আরেকটি URL মধ্যে হয়
DritanX

1
7 stram জন্য সর্বোচ্চ ভলিউম হয়
লিও Droidcoder

11

ভবিষ্যতের গুগলারের জন্য: RingtoneManager.getActualDefaultRingtoneUri()পরিবর্তে ব্যবহার করুন RingtoneManager.getDefaultUri()। এর নাম অনুসারে, এটি আসল ইউরি ফিরিয়ে দেবে, তাই আপনি নিখরচায় ব্যবহার করতে পারেন। এর ডকুমেন্টেশন থেকে getActualDefaultRingtoneUri():

বর্তমান ডিফল্ট শোনার উরি পায়। এটি প্রকৃত শব্দ উরি দেবে, এটি ব্যবহারের পরিবর্তে, বেশিরভাগ ক্লায়েন্টগুলি ডিএএফএএলT_RINGTONE_URI ব্যবহার করতে পারে।

এদিকে এটি getDefaultUri()বলেছেন:

একটি নির্দিষ্ট ধরণের ডিফল্ট রিংটনের জন্য উরি ফিরিয়ে দেয়। আসল রিংটনের শব্দ উরি ফিরিয়ে দেওয়ার পরিবর্তে এটি প্রতীকী উরি ফিরিয়ে দেবে যা বাজানোর পরে আসল শব্দটিতে সমাধান হবে resolved


9

আপনি ডিডিএমএস ব্যবহার করে আপনার / এসডিকার্ড ফোল্ডারে একটি এমপি 3 ফাইল টিপতে পারেন, এমুলেটরটি পুনরায় চালু করতে পারেন, তারপরে মিডিয়া অ্যাপ্লিকেশনটি খুলুন, আপনার এমপি 3 ফাইলে ব্রাউজ করুন, এটিতে দীর্ঘক্ষণ টিপুন এবং "ফোন রিংটোন হিসাবে ব্যবহার করুন" নির্বাচন করুন।

ত্রুটি চলে গেছে!

সম্পাদনা করুন: রিংড্রয়েড অ্যাপ্লিকেশন ব্যবহার করে বিজ্ঞপ্তি শব্দগুলির সাথে একই সমস্যা (যেমন এসএমএসের জন্য) সমাধান হয়েছে


4
public class AlarmReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        //this will update the UI with message
        Reminder inst = Reminder.instance();
        inst.setAlarmText("");

        //this will sound the alarm tone
        //this will sound the alarm once, if you wish to
        //raise alarm in loop continuously then use MediaPlayer and setLooping(true)
        Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        if (alarmUri == null) {
            alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        }
        Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
        ringtone.play();

        //this will send a notification message
        ComponentName comp = new ComponentName(context.getPackageName(),
                AlarmService.class.getName());
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

কোথায় AlarmServiceথেকে এসেছে?
এডুয়ার্ডো ওয়াদা

2

এমুলেটরটির এসডি কার্ডে একটি অডিও ফাইল অনুলিপি করা এবং এটি ডিফল্ট রিংটোন হিসাবে মিডিয়া প্লেয়ারের মাধ্যমে নির্বাচন করা সমস্যার সমাধান করে না।


2

আপনি এই নমুনা কোডটি ব্যবহার করতে পারেন:

Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone ringtoneSound = RingtoneManager.getRingtone(getApplicationContext(), ringtoneUri)

if (ringtoneSound != null) {
    ringtoneSound.play();
}

0

এটি দেরিতে হতে পারে তবে কে কখন এটি চায় তার জন্য এই প্রশ্নের নতুন একটি সহজ সমাধান রয়েছে।
কোটলিনে

val player = MediaPlayer.create(this,Settings.System.DEFAULT_RINGTONE_URI)
player.start()

উপরের কোডটি ডিফল্ট রিংটোন খেলবে তবে আপনি যদি ডিফল্ট অ্যালার্ম চান তবে পরিবর্তন করুন

Settings.System.DEFAULT_RINGTONE_URI

প্রতি

Settings.System.DEFAULT_ALARM_ALERT_URI


-4

এখানে কিছু নমুনা কোড রয়েছে:

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), notification);
mediaPlayer.start();

সামান্য ব্যাখ্যা দিয়ে কোডটি ব্যাখ্যা করুন, কোডের উত্তরগুলি প্রশংসিত হয় না।
সুলতান আলাউদ্দিন

আসুন মানুষ, আপনি উত্তরগুলি সম্ভবত কখনও পড়েন না। stackoverflow.com/a/20177743/3332634
yshahak

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