使用上下文菜单方法将多个Android音板声音保存为铃声或通知

时间:2011-08-15 03:41:19

标签: android contextmenu

如何将我创建的音板应用中的所有声音设置为铃声或通知?我知道如何实现上下文菜单代码并注册上下文菜单的每个按钮。我无法弄清楚的是如何只用一个上下文菜单来处理多个按钮和声音。我已经浏览了本网站上的每一个例子,并尝试了所提供的所有解决方案,但对本网站上类似问题的每一个回答都过于模糊或不完整。

有人可以请我解决我的问题,而不是太模糊吗?我知道你不想为他们写别人的代码,但如果有人能提供一个正确的代码的简单例子来使这个请求工作,它会像我一样节省大量的搜索和头痛的新手。下面的代码效果很好,但仅适用于savering和savenot函数中的第一个声音集。如何长按表示与按下的按钮关联的声音文件是保存为通知还是铃声?

    Button btn = (Button) findViewById(R.id.shesaid);  
    registerForContextMenu(btn); 

    Button btn2 = (Button) findViewById(R.id.shesaid2);  
    registerForContextMenu(btn2);

    Button btn3 = (Button) findViewById(R.id.shesaid3);  
    registerForContextMenu(btn3);

    Button btn4 = (Button) findViewById(R.id.twss11);  
    registerForContextMenu(btn4);

    Button btn5 = (Button) findViewById(R.id.twss1);  
    registerForContextMenu(btn5);
}

@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.shesaid)){              
    // 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.shesaid)){              
    // 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();            }
    }

以上是上下文菜单代码。如何设置它以使用多个声音?

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="shesaid"+".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, "shesaid");
 values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
 values.put(MediaStore.Audio.Media.ARTIST, "nick");
 values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
 values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
 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;
}

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="shesaid"+".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, "shesaid");
 values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
 values.put(MediaStore.Audio.Media.ARTIST, "nick");
 values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
 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;

}

}

以下是将声音保存到SD卡的每个函数的代码。同样,如何保存与我已注册上下文菜单的五个按钮中的每一个相关联的每个声音?

0 个答案:

没有答案