Сделать звуковой клип в спискеView доступным для выбора в качестве мелодии звонка (уведомления)?

У меня есть список тонов, которые я сделал, мне удалось поместить их в список, но теперь я столкнулся с проблемой, позволяющей пользователю «коснуться и удерживать» для назначения в качестве сигнала уведомления. Вот код из MainActivity.java:

       import java.util.ArrayList;
import android.app.ListActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ListView;
public class MainActivity extends ListActivity {
private ArrayList<Sound> mSounds = null;
private SoundAdapter mAdapter = null;
static MediaPlayer mMediaPlayer = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerForContextMenu(getListView());
this.getListView().setSelector(R.drawable.selector);
//create a simple list
mSounds = new ArrayList<Sound>();
Sound s = new Sound();
s.setDescription("Anjels");
s.setSoundResourceId(R.raw.anjels);
mSounds.add(s);
s = new Sound();
s.setDescription("Aggro");
s.setSoundResourceId(R.raw.aggro);
mSounds.add(s);
s = new Sound();
s.setDescription("Axo");
s.setSoundResourceId(R.raw.axo);
mSounds.add(s);
s = new Sound();
s.setDescription("Basix");
s.setSoundResourceId(R.raw.basix);
mSounds.add(s);
s = new Sound();
s.setDescription("Bender");
s.setSoundResourceId(R.raw.bender);
mSounds.add(s);
mAdapter = new SoundAdapter(this, R.layout.list_row, mSounds);
setListAdapter(mAdapter);
}
@Override
public void onListItemClick(ListView parent, View v, int position, long id){
Sound s = (Sound) mSounds.get(position);
MediaPlayer mp = MediaPlayer.create(this, s.getSoundResourceId());
mp.start();

}@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
  }
}

У меня также есть два других java-файла: один — «звуковой класс», а другой — «звуковой адаптер», хотя я не думаю, что они относятся к моему вопросу.

Чтобы вы знали, мне потребовались недели, чтобы зайти так далеко, поскольку я все еще новичок в javaland. Любая помощь или примеры здесь будут горячими! Черт, если ты хочешь сделать работу за меня, тогда это еще слаще!


person Jason Mills    schedule 06.08.2013    source источник
comment
Я не понимаю. Почему вы убрали код ContextMenu?   -  person codeMagic    schedule 07.08.2013
comment
Извините, что задал этот вопрос до того, как разобрался с этой частью, теперь обновил.   -  person Jason Mills    schedule 07.08.2013
comment
Так в чем проблема у вас с ним сейчас?   -  person codeMagic    schedule 07.08.2013
comment
Я просто хочу, чтобы кто-то указал мне правильное направление относительно того, как сделать так, чтобы каждый звук в списке можно было установить в качестве сигнала уведомления. Я слышал, как многие люди говорят об URI, но я думаю, что это далеко не мое. Также кажется, что мелодии звонка сначала нужно скопировать на SD, прежде чем их можно будет использовать в качестве рингтона.   -  person Jason Mills    schedule 07.08.2013
comment
Кроме того, я, кажется, создал длинный массив списков в основном потоке, который, как я знаю, не одобряется, я полагаю. Начинаю жалеть, что не сделал это по-другому :( просто хочу, чтобы кто-нибудь помог мне.   -  person Jason Mills    schedule 07.08.2013


Ответы (1)


Решение, которое я публикую, просто позволяет вам определить положение элемента списка, который вы щелкнули и установили в качестве мелодии звонка (который не работает), внутри функции setRingtone происходит волшебство. весь код для создания звука в качестве мелодии звонка должен быть помещен туда

Внутри switch замените case id 'main_menu' на item id с вашего menu -> context_menu.xml, как показано ниже.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/main_menu"
    android:title="@string/set_ringtone"
    android:showAsAction="ifRoom"
    />
</menu>

Добавьте под onCreateContextMenu приведенный ниже код.

 @Override
 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
     super.onCreateContextMenu(menu, v, menuInfo);
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.context_menu, menu);
   }
 }

 /*-----------------------------  add code below ------------------------------*/

 @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info;
        try {
            info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        } catch (ClassCastException e) {
            Log.e("", "bad menuInfo", e);
            return false;
        }

        switch (item.getItemId()){
            case R.id.main_menu:
                setRingtone(item.getItemId(), info.position);
                //Toast.makeText(this, "id = " + item.getItemId() + " pos =     " + info.position, Toast.LENGTH_SHORT).show();
                break;
            default:
                return false;
        }

        return true;
    }

    public  void setRingtone(int id, int pos){
        //RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);

        Toast.makeText(this, "id = " + id + " pos = " + pos, Toast.LENGTH_SHORT).show();
    }
person Mustafa Ekici    schedule 15.02.2015