2014-01-28 9 views
0

У меня есть список только с текстом, когда я нажимаю этот элемент песни. Это работает очень хорошо, но когда я нажимаю onItemLongClick(), мне нужна эта песня в качестве мелодии звонка.Ссылочный ресурс ListView, заданный как мелодия звонка

Я скопировал код. Теперь моя проблема теперь, когда я нажимаю itemlongclick, результат - это «No se pudo asignar como ringtone» (не может назначаться в качестве мелодии звонка)

Все песни находятся в сырых ресурсах.

public class MainActivity extends Activity { 

MediaPlayer mp = new MediaPlayer(); 
ListViewAdapter adapter; 
int s1[] = 
     { 
       R.raw.el_tri_abuelita_soy_tu_nieto, 
       R.raw.el_tri_ahi_te_lo_lavas, 
       R.raw.el_tri_bajate_del_avion, 

     }; 

int position; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView list30 = (ListView) findViewById(R.id.list); 

    ArrayList<String> items = new ArrayList<String>(); 
    items.add("Abuelita soy tu nieto"); 
    items.add("Ahi te lo lavas"); 
    items.add("Bajate del avion"); 

    adapter = new ListViewAdapter(this, items); 
    list30.setAdapter(adapter); 

    list30.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      method(position); //play de song normaly, this work well 
      } 
     }); 
    Log.i("ramiro", "onClickListener"); 

    list30.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 


if(saveas(R.raw.el_tri_abuelita_soy_tu_nieto, "examplename") == true) 
    Toast.makeText(getApplication(), "Se asigno como ringtone", Toast.LENGTH_SHORT).show(); 
else 
    Toast.makeText(getApplicationContext(), "No se pudo asignar como ringtone", Toast.LENGTH_SHORT).show(); //out over here 
    return false; 
     } 
    }); 
} 

public boolean saveas(int ressound, String soundName) 
{ 
    byte[] buffer=null; 
    InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
    int size=0; 

    try { 
     size = fIn.available(); 
     buffer = new byte[size]; 
     fIn.read(buffer); 
     fIn.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } 

    String path="/sdcard/media/audio/ringtones/"; 
    String filename=soundName+".mp3"; 


    boolean exists = (new File(path)).exists(); 
    if (!exists){new File(path).mkdirs();} 

    FileOutputStream save; 
    try { 
     save = new FileOutputStream(path+filename); 
     save.write(buffer); 
     save.flush(); 
     save.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } 

ответ

0

Я последовал за пару учебников по настройке мелодий и уведомлений, и это то, что я закончил с. Вы вызываете метод saveas() и передаете ему звук в вашей исходной папке, а затем A String soundName, который будет названием звука, указанного при выборе мелодии звонка. Метод вернет false, если не удалось, и true, если он сработает. Также в манифесте андроида нужно разрешить;
использует разрешение-андроид: имя = "android.permission.WRITE_EXTERNAL_STORAGE"
использует разрешение-андроид: имя = "android.permission.WRITE_SETTINGS"
использует разрешение-андроид: имя = "android.permission.CHANGE_CONFIGURATION"
использует разрешение-андроида: имя = «android.permission.MODIFY_AUDIO_SETTINGS»

также убедитесь, чтобы изменить код по мере необходимости, если вы используете что-то другое, чем .mp3

saveas(R.raw.examplesound, "examplename") 

public boolean saveas(int ressound, String soundName) 
{ 
    byte[] buffer=null; 
    InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
    int size=0; 

    try { 
     size = fIn.available(); 
     buffer = new byte[size]; 
     fIn.read(buffer); 
     fIn.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } 

    String path="/sdcard/media/audio/ringtones/"; 
    String filename=soundName+".mp3"; 


    boolean exists = (new File(path)).exists(); 
    if (!exists){new File(path).mkdirs();} 

    FileOutputStream save; 
    try { 
     save = new FileOutputStream(path+filename); 
     save.write(buffer); 
     save.flush(); 
     save.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     return false; 
    } 

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path + filename))); 

    File k = new File(path, filename); 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, soundName); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
    values.put(MediaStore.Audio.Media.ARTIST, "artistname "); 
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
    values.put(MediaStore.Audio.Media.IS_ALARM, false); 
    values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

    //Work with the content resolver now 
    //First get the file we may have added previously and delete it, 
    //otherwise we will fill up the ringtone manager with a bunch of copies over time. 
    Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); 
    this.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); 

    //Ok now insert it 
    Uri newUri = this.getContentResolver().insert(uri, values); 

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

Кстати это не мое полностью мой код, я просто отредактировал его по моим потребностям, я основывал его на этом http://www.stealthcopter.com/blog/2010/01/android-saving-a-sound-file-to-sd-from-resource-and-setting-as -ringtone/ –

+0

hi @ user3180189 Я поставил код, но все еще не работал – user3225759

Смежные вопросы