动态保存到 SD 卡和上下文菜单功能,或相对于按下的按钮

发布于 2024-10-13 04:44:03 字数 5544 浏览 7 评论 0原文

相对于下面的代码,如何使

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

and

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

动态

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

而不是静态,以便保存的声音文件基于按下的按钮?

我的声音文件位于 soundArray 中,保存为 sound1、sound2、sound3 等。每个声音文件都有一个按钮。单击即可播放,长按会弹出以下上下文菜单。

任何帮助或提示将不胜感激。

//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; 
    }

Relative to the below code, how do I make

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

and

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

and

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

dynamic instead of static so that the sound file that will be saved is based on the button pressed?

My sound files are in a soundArray saved as sound1, sound2, sound3, etc. There is a button for each sound file. Click to play, long click brings up the below context menu.

Any help or hints would be greatly appreciated.

//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; 
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑饮青盏花 2024-10-20 04:44:03

我认为您可以通过使用以下更改来获得解决方案:

1:采用两个数组。一个用于存储要添加到菜单中播放的铃声按钮 ID,另一个数组分别具有该按钮声音的相应声音数组 ID;

例如,

int btnid=new int[count];//count is no of buttons for playing ring
int rawid=ne int[count];

然后您可以捕获单击的菜单项的按钮 id,然后您必须在 function1 中与您的 btnid 数组进行比较,并获取匹配的 btnid 数组的索引。

2:使用相同的索引后,您可以在 rawid 数组中找到 rawsource。


您的第一个问题已解决,现在对于文件名的第二个问题,您只需尝试以下操作:

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

I think you can got solution by using following changes:

1: take two arrays. one for storing your ringbuttons ids which you are adding to menu to play and another array respectively with corresponding sound array id for that button's sound;

For example,

int btnid=new int[count];//count is no of buttons for playing ring
int rawid=ne int[count];

Then you can catch the id of button of clicked menuitem and from that you have to compare in function1 with your btnid array and get the index of array of btnid matched.

2: than after with same index you can find rawsource in rawid array.


Your first problem is solved, now for that second prob of filename you just try this:

String filename="sound"+id+".ogg";//id is index of array 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文