एंड्रॉइड में रिंगटोन / अलार्म ध्वनि कैसे खेलें


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
अच्छा और सरल। हालांकि, डिवाइस के आधार पर, यह विधि अन्य ध्वनियों (जैसे संगीत) को बाधित कर सकती है जो एंड्रॉइड में चल रही हो सकती है।
.गर्डेक

GetApplicationContext () का उपयोग करना बहुत अच्छा विकल्प नहीं हो सकता है। यहाँ अधिक जानकारी: stackoverflow.com/questions/9122627/…
साकेत

@BartSimpson ने u कैसे सुलझाया im इस त्रुटि को भी प्राप्त कर रहा है
user3233280

1
रिंगटोन रुक नहीं सकती। यदि रिंगटोन फिर से शुरू करते हैं, तो डबल खेलता है। stopPrepret काम नहीं कर रहा है, वैसे मैं रिंगटोन प्लेयर एक ही संदर्भ ऑब्जेक्ट के साथ बनाता हूं, न कि 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
लौटाया गया URI nullभले ही वैध ध्वनि की ओर संकेत नहीं करता हो। आप के रिटर्न मान का परीक्षण करना चाहिए RingtoneManager.getRingtone()के लिए nullबजाय / के रूप में अच्छी तरह से
अट्टिला

2017 में, रिंग में विफल नहीं काम कर रहा। क्या आपके पास हाल के Android में काम कर रहा है?

55

इस तरह से मैंने किया है:

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

यह मार्कोव के रास्ते के समान है, लेकिन रिंगटोन के बजाय मीडियाप्लेयर का उपयोग करता है जो अन्य ध्वनियों को बाधित करता है, जैसे कि संगीत, जो पहले से ही पृष्ठभूमि में खेल रहा है।


5
मैंने शीर्ष उत्तर (रिंगटोन.प्ले) की कोशिश की, लेकिन ध्वनि कट सकती है। मैंने इस दृष्टिकोण का उपयोग किया और इसने पूरी तरह से काम किया।
wyz

1
यह उनके ऐप में किसी भी अन्य ऑडियो घटकों का उपयोग करने वाले किसी के लिए एक बेहतर समाधान है।
EntangledLoops

@YumYumYum, मैंने अभी परीक्षण किया है और यह काम करता है। मैंने कुछ भी नहीं किया लेकिन उपर्युक्त कोड को मेरे सेटऑनक्लिक लिस्टनर में डाल दिया। तुमने क्या किया?
फ़ीचर आकाश

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 से क्यों विभाजित कर रहे हैं? क्या यह सामान्य रूप से ज्ञात कार्य मूल्य है या कुछ और जो आप स्वयं खोदते हैं?
ErGo_404

कुछ मैं बाहर खोदा ... डी
कामरान अहमद

आप फ़्लोट.परसेफ़्लोट (डबल.टोस्ट्रिंग (....)) क्यों करते हैं ?? स्ट्रिंग उदाहरण के माध्यम से जा रहे हैं क्योंकि आप एक डबल-> फ्लोट रूपांतरण चाहते हैं? आपने यह क्यों किया?
जोर्डिड

1
यह भाग अनावश्यक Uri.parse (RingtoneManager.getDefaultUri (RingtoneManager.TYPE_NOTIFICATION)) है, getDefaultUri () पहले से ही एक URI लौटाएं, इसे अभी तक किसी अन्य URI में विभाजित करने की आवश्यकता नहीं है
DritanX


11

भविष्य के googler के लिए: के RingtoneManager.getActualDefaultRingtoneUri()बजाय का उपयोग करें RingtoneManager.getDefaultUri()। अपने नाम के अनुसार, यह वास्तविक यूरी को लौटाएगा, इसलिए आप इसे स्वतंत्र रूप से उपयोग कर सकते हैं। के प्रलेखन से getActualDefaultRingtoneUri():

वर्तमान डिफ़ॉल्ट ध्वनि उड़ी हो जाती है। यह वास्तविक ध्वनि उड़ी देगा, इसके बजाय, अधिकांश ग्राहक DEFAULT_RINGTONE_URI का उपयोग कर सकते हैं।

इस बीच getDefaultUri()यह कहते हैं:

एक विशेष प्रकार के डिफ़ॉल्ट रिंगटोन के लिए उड़ी लौटता है। वास्तविक रिंगटोन के साउंड उरी को वापस करने के बजाय, यह प्रतीकात्मक उरी को लौटा देगा जो कि बजने पर वास्तविक ध्वनि के लिए हल हो जाएगा।


9

आप DDMS का उपयोग करके अपने / sdcard फ़ोल्डर में एक एमपी 3 फ़ाइल को धक्का दे सकते हैं, एमुलेटर को पुनरारंभ कर सकते हैं, फिर मीडिया एप्लिकेशन खोलें, अपनी एमपी 3 फ़ाइल में ब्राउज़ करें, उस पर लंबे समय तक दबाएं और "फोन रिंगटोन के रूप में उपयोग करें" चुनें।

त्रुटि हो गई है!

संपादित करें: नोटिफिकेशन ध्वनियों के साथ एक ही परेशानी (जैसे एसएमएस के लिए) Ringdroid एप्लिकेशन का उपयोग करके हल की गई


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
यशांक

1
यह मूल रूप से इस उत्तर के साथ समान है , लेकिन mediaPlayerइसके बजाय चर नाम के साथ mp
Makyen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.