2011-01-22 2 views
1

relative au code ci-dessous, comment puis-je faireFaire enregistrer sur la carte SD et les fonctions du menu contextuel dynamique, ou par rapport à bouton enfoncé

if (savering(R.raw.sound1)){ 

et

String filename=”sound1″+”.ogg”; 

et

values.put(MediaStore.MediaColumns.TITLE, “sound1″); 

dynamique au lieu de statique de sorte que le fichier son qui sera enregistré est basé sur le bouton enfoncé?

Mes fichiers son sont dans un soundArray enregistré en tant que sound1, sound2, sound3, etc. Il y a un bouton pour chaque fichier son. Cliquez pour jouer, clic long affiche le menu contextuel ci-dessous.

Toute aide ou conseil serait grandement apprécié.

//CONTEXT MENU 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("Save as..."); 
    menu.add(0, v.getId(), 0, "Ringtone"); 
    menu.add(0, v.getId(), 0, "Notification"); 
    } 
    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
    if(item.getTitle()=="Ringtone"){function1(item.getItemId());} 
     else if(item.getTitle()=="Notification"){function2(item.getItemId());} 
     else {return false;} 
    return true; 
    } 

    public void function1(int id){ 
    if 
    (savering(R.raw.sound1)){ 
     // Code if successful 
     Toast.makeText(this, "Saved as Ringtone", Toast.LENGTH_SHORT).show(); 
    }   
    else   
    { 
     // Code if unsuccessful 
     Toast.makeText(this, "Failed - Check your SDCard", Toast.LENGTH_SHORT).show(); 
    } 

    } 
    public void function2(int id){ 
    if 
    (savenot(R.raw.sound1)){ 
     // Code if successful 
     Toast.makeText(this, "Saved as Notification", Toast.LENGTH_SHORT).show(); 
    }   
    else   
    { 
     // Code if unsuccessful 
     Toast.makeText(this, "Failed - Check your SDCard", Toast.LENGTH_SHORT).show(); 
    } 
    } 

//Save into Ring tone Folder 

    public boolean savering(int ressound){ 
    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="sound1"+".ogg"; 

    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, "sound1 Ringtone"); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
    values.put(MediaStore.Audio.Media.ARTIST, "cssounds "); 
    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);  

    //Insert it into the database 
    this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 

    return true; 
    } 

//Save in Notification Folder 

    public boolean savenot(int ressound){ 
    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/notifications/"; 
    String filename="sound1"+".ogg"; 

    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, "sound1 Notification"); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
    values.put(MediaStore.Audio.Media.ARTIST, "cssounds "); 
    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);  

    //Insert it into the database 
    this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 

    return true; 
    } 
+0

pls pouvez-vous préciser comment le ce que les éléments de menu ont you.it est des fichiers audio sur chaque ur élément du menu? –

+0

Oui, un bouton est affiché pour chaque fichier son – Aaron

+0

afin que vous puissiez obtenir un identifiant pour chaque élément de menu de la sonnerie. –

Répondre

1

ok donc je pense que vous pouvez obtenu sol en utilisant les modifications suivantes:


1: prendre deux tableaux .one pour stocker vos ringbuttons ids que vous ajoutez au menu pour jouer et un autre tableau respectivement avec l'identifiant du réseau sonore correspondant pour le son des boutons;


pour exa.`int btnid = new [count] int; // comptage est pas de boutons pour jouer anneau int rawid = ne int [count];

` que vous pouvez attraper l'id de bouton de clic menuitem et de tht vous devez comparer à function1 avec votre tableau btnid et l'index de tableau de btnid adapté

2: que après avec la même index vous pouvez trouver rawsource dans le tableau rawid.


ur 1er prob est sloved maintenant pour la deuxième prob de nom de fichier tht vous essayez ceci:

String filename="sound"+id+".ogg";//id is index of array 
+0

Merci beaucoup. Je vais être honnête, je ne suis pas tout à fait sûr de la façon de mettre en œuvre toutes vos suggestions que j'ai construit ma matrice de sons en utilisant une suggestion que j'ai lu et c'est fait différemment. Aussi, je ne suis pas tout à fait sûr de savoir comment passer l'ID de l'index du tableau à la fonction d'économie, mais c'est vraiment utile. J'apprécie vraiment que vous preniez le temps d'offrir de l'aide. Merci encore! – Aaron

+0

Ok, donc j'ai fait les tableaux en utilisant la syntaxe de raccourci int [] anArray = {R.raw.sound1, R.raw.sound2, etc.}; R.id.sound1, etc. pour les boutons. Je ne sais pas comment les utiliser, pour attraper le numéro d'index et le transmettre aux fonctions de l'activité. Tous les tutoriels que j'ai trouvés finissent par faire l'index, ils n'incluent pas l'utiliser. – Aaron

+0

aron vous pouvez obtenir menuitemid à partir du menu click.ok.so en fonction de cela, vous devez déterminer quels éléments du menu bouton démarrer et en l'identifiant vous pouvez comprendre index.its maintenant vous devez implémenter la logique. –

Questions connexes