2009-12-31 30 views
12

संभव डुप्लिकेट:
How to set ringtone in Android from my activity?एंड्रॉयड में रिंगटोन सेटिंग

मेरे पास मेरी रेस/कच्चे फ़ोल्डर में फ़ाइलें लगता है और मैं क्लिक पर एक रिंगटोन के रूप में स्थापित करने के लिए एक ध्वनि का चयन करना चाहते एक बटन का आश्चर्य है कि मैं यह कैसे कर सकता हूँ?

+0

क्या आपको कभी समाधान मिला है? – vondip

+1

यह एक डुप्लिकेट नहीं है! कच्ची फ़ाइल से रिंगटोन सेट करने के बारे में यह वार्तालाप। दूसरा एक एसडी कार्ड पर पहले से ही रिंगटोन सेट करने का तरीका है। कृपया दोबारा खोलें मेरे पास एक पूर्ण समाधान है। – ozmike

उत्तर

-1

मैं "छल्ले विस्तारित" http://www.androidapps.com/t/rings-extended

कि ऐप इंस्टॉल किया है जब आप अपने रिंगटोन बदलने के लिए आप छल्ले विस्तारित चयन करने का विकल्प होगा जाना के साथ

का उपयोग करें। रिंगटोन संपादित करने के लिए "रिंगड्रॉइड" का भी उपयोग करें। अब आप जिस तरह से आप चाहते थे काम कर अपने कार्यक्रम मिल गया है से उम्मीद है कि

ContentValues values = new ContentValues(); 
values.put(MediaStore.MediaColumns.DATA, <<asbolutePathToYourAudioFileHere>>); 
values.put(MediaStore.MediaColumns.TITLE, "<<yourRingToneNameHere>>"); 
values.put(MediaStore.MediaColumns.SIZE, k); 
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg"); // assuming it's an mpeg, of course 
values.put(MediaStore.Audio.Media.ARTIST, "<<yourArtistNameHere>>"); 
// values.put(MediaStore.Audio.Media.DURATION, duration); // doesn't appear to be necessary if you don't know 
values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 

Uri uri = MediaStore.Audio.Media.getContentUriForPath(outPath); 
Uri newUri = getContentResolver().insert(uri, values); 

RingtoneManager.setActualDefaultRingtoneUri(
           <<MyActivity>>.this, 
           RingtoneManager.TYPE_RINGTONE, 
           newUri); 
+0

मैं अपने ऐप में इस सुविधा को शामिल करने के लिए एक उदाहरण स्रोत कोड चाहता हूं। –

+0

http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/RingsExtended/src/com/example/android/rings_extended – SuperJames

5

इस प्रयास करें, यह मेरे लिए काम करता है। बस रिकॉर्ड के लिए, आपको फ़ाइल को एक रिंगटोन फ़ोल्डर के नीचे sdcard में सहेजना चाहिए। सुनिश्चित करें कि यह कम cased है क्योंकि एंड्रॉइड में इससे कोई फर्क नहीं पड़ता।

27

@Maxood

@Clive से कोड आप रिंगटोन सेट करने की जरूरत क्या है। आपको फ़ाइल के पूर्ण पथ की आवश्यकता होगी, जिसे आप कच्चे संसाधन से नहीं प्राप्त कर सकते हैं।

समाधान संसाधन फ़ाइल संपत्ति प्राप्त करना और एसडीकार्ड 1 को लिखना है, इससे पहले कि आप इसे सम्मिलन के लिए सामग्री रिज़ॉल्वर को दें।

File newSoundFile = new File("/sdcard/media/ringtone", "myringtone.oog"); 
Uri mUri = Uri.parse("android.resource://com.your.package/R.raw.your_resource_id"); 
ContentResolver mCr = app.getContentResolver(); 
AssetFileDescriptor soundFile; 
try { 
     soundFile= mCr.openAssetFileDescriptor(mUri, "r"); 
    } catch (FileNotFoundException e) { 
     soundFile=null; 
    } 

    try { 
     byte[] readData = new byte[1024]; 
     FileInputStream fis = soundFile.createInputStream(); 
     FileOutputStream fos = new FileOutputStream(newSoundFile); 
     int i = fis.read(readData); 

     while (i != -1) { 
     fos.write(readData, 0, i); 
     i = fis.read(readData); 
     } 

     fos.close(); 
    } catch (IOException io) { 
    } 

तो फिर तुम अनुमति

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

अपने प्रकट

आशा में इस मदद करता है लिखने के लिए पहले से तैनात समाधान

 ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, newSoundFile.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, "my ringtone"); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/oog"); 
    values.put(MediaStore.MediaColumns.SIZE, newSoundFile.length()); 
    values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name); 
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
    values.put(MediaStore.Audio.Media.IS_ALARM, true); 
    values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

    Uri uri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile.getAbsolutePath()); 
    Uri newUri = mCr.insert(uri, values); 


    try { 
     RingtoneManager.setActualDefaultRingtoneUri(getContext(), RingtoneManager.TYPE_RINGTONE, newUri); 
    } catch (Throwable t) { 
     Log.d(TAG, "catch exception"); 
    } 
उपयोग कर सकते हैं

मत भूलना

+5

यहां एक मृत घोड़े को मारने की कोशिश नहीं कर रहा है, लेकिन सुनिश्चित करें कि आपके पास अनुमति है <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.WRITE_EXTERNAL_STORAGE" /> अपने मैनिफेस्ट में यदि आप एसडी कार्ड पर लिख रहे हैं या नहीं तो आपको एक त्रुटि मिलेगी। – dell116

+2

यह भी ध्यान दें: यूरी uri = Uri.parse ("android.resource: //com.example.myapp/" + r.raw.my_resource) जैसे यूरी को सेट करना सुनिश्चित करें; या उरी uri = Uri.parse ("android.resource: //com.example.myapp/raw/my_resource"); http://developer.android.com/reference/android/content/ContentResolver.html#openAssetFileDescriptor%28android.net.Uri,%20java.lang.String%29 – worked

+0

आपको अपनी प्रोजेक्ट में कच्ची निर्देशिका को पुनर्विक्रय निर्देशिका के तहत बनाना होगा हो सकता है कि मेरे लिए नहीं, my_resource फ़ाइल नाम से कम है .extension – ozmike

संबंधित मुद्दे