Вопросы относительно Установить как рингтон Android

Первый. Я получил код для установки в качестве мелодии звонка. Одна вещь, которую я не понимаю. У меня в приложении 64 звуковых файла. Есть ли способ получить что-то вроде ID, когда я нажимаю на какую-то кнопку, или мне нужно написать целый код для всех 64 файлов?

Второй. У меня есть список в моем приложении, и я хочу, чтобы при длительном нажатии на этот файл был выбран рингтон. Сейчас. Нужно ли писать весь код в кейсе, или я могу выполнить другое действие, а затем просто установить мелодию звонка таким образом? Что-то вроде этого

case 1:
    RingtoneManager.setActualDefaultRingtoneUri(
          myActivity,
          Activity name.TYPE_RINGTONE,
          newUri
break;

Ну вот и все, возможно ли получить идентификатор из файла, скопировать этот файл и установить его в качестве мелодии звонка при длинном щелчке, или мне нужно написать код для всех 64 файлов? Изменить: Если 1-й вопрос не представляется возможным, как я должен написать код для всех 64 файлов? Где их поставить? И как я могу определить, какой файл будет скопирован, когда я нажимаю на определенную кнопку. Или в виде списка

Мой код:

l.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                String selectedName = ((ListView) view.findViewById(R.id.listView1)).getContext().toString();

                AssetManager assetManager = getAssets();

                File file = new File(Environment.getExternalStorageDirectory(),
                        "/myRingtonFolder/Audio/");
                if (!file.exists()) {
                    file.mkdirs();
                }

                String path = Environment.getExternalStorageDirectory()
                        .getAbsolutePath() + "/MyRingtones/Audio/";

                File out = new File(path + "/", selectedName);     
                if(!out.exists()){
                    copyFile(assetManager, "Yeah.mp3", out);
                }           

                ContentValues values = new ContentValues();
                values.put(MediaStore.MediaColumns.DATA, out.getAbsolutePath());
                values.put(MediaStore.MediaColumns.TITLE, "yeah");
                values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
                values.put(MediaStore.MediaColumns.SIZE, out.length());
                values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
                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, true);

                Uri uri = MediaStore.Audio.Media.getContentUriForPath(out.getAbsolutePath());
                ContentResolver mCr = getContentResolver();
                Uri newUri = mCr.insert(uri, values);

                try {
                    RingtoneManager.setActualDefaultRingtoneUri(
                             getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
                    Settings.System.putString(mCr, Settings.System.RINGTONE,
                            newUri.toString());
                } 
                catch (Throwable t) 
                {
                    //TODO Handle exception
                }
                switch (position){
                case 0:
                     if(mp!=null)
                        {
                            mp.release();
                            mp=null;
                        }

                     MediaPlayer.create(MainActivity.this, R.raw.aint);
                        mp.start();
                    break;
                case 1:
                     if(mp!=null)
                        {
                            mp.release();
                            mp=null;
                        }

                        mp = MediaPlayer.create(MainActivity.this,
                                R.raw.airh);
                        mp.start();

LogCat:

02-25 09:21:34.064: W/dalvikvm(10221): threadid=1: thread exiting with uncaught exception (group=0x41aac8b0)
02-25 09:21:34.074: E/AndroidRuntime(10221): FATAL EXCEPTION: main
02-25 09:21:34.074: E/AndroidRuntime(10221): java.lang.NullPointerException
02-25 09:21:34.074: E/AndroidRuntime(10221):    at funnysounds.com.MainActivity$1.onItemClick(MainActivity.java:63)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.widget.AbsListView.performItemClick(AbsListView.java:1104)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2792)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.widget.AbsListView$1.run(AbsListView.java:3468)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.os.Handler.handleCallback(Handler.java:730)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.os.Looper.loop(Looper.java:213)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at android.app.ActivityThread.main(ActivityThread.java:5225)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at java.lang.reflect.Method.invokeNative(Native Method)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at java.lang.reflect.Method.invoke(Method.java:525)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
02-25 09:21:34.074: E/AndroidRuntime(10221):    at dalvik.system.NativeStart.main(Native Method)

1 ответ

Решение

Я бы не использовал переключатель, но поставил слушатель щелчка:

listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

            // selected item
           String selectedName = ((TextView) view.findViewById(R.id.your_textView_item_id)).getText().toString();

            AssetManager assetManager = getAssets();

            File file = new File(Environment.getExternalStorageDirectory(),
                    "/myRingtonFolder/Audio/");
            if (!file.exists()) {
                file.mkdirs();
            }

            String path = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/MyRingtones/Audio/";

            File out = new File(path + "/", selectedName);     
            if(!out.exists()){
                try {
                    copyFile(assetManager, "Yeah.mp3", out);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }           

            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DATA, out.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE, "yeah");
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.MediaColumns.SIZE, out.length());
            values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
            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, true);

            Uri uri = MediaStore.Audio.Media.getContentUriForPath(out.getAbsolutePath());
            ContentResolver mCr = getContentResolver();
            Uri newUri = mCr.insert(uri, values);

            try {
                RingtoneManager.setActualDefaultRingtoneUri(this,    RingtoneManager.TYPE_RINGTONE, newUri);
                Settings.System.putString(mCr, Settings.System.RINGTONE,
                        newUri.toString());
            } 
            catch (Throwable t) 
            {
                //TODO Handle exception
            }

        }
      });
Другие вопросы по тегам