2014-02-20 4 views
0

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

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

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) 
+0

Пробовали ли вы с ' onItemClick() 'метод? –

+0

Да, и это не сработало. Я не могу понять, как настроить создание файла и установить этот файл в качестве мелодии звонка по 1 клику. Я не могу заставить его работать onItemClick() в виде списка. Я новичок в разработке Android. Я сделал тестовое приложение, добавил 1 кнопку, и это сработало. Поэтому мне было интересно, есть ли что-то вроде: На элементе click> Execute Activity> Но не менять макет. –

+0

Хорошо, сначала вопрос, должен ли я поставить весь код на случай? Или просто некоторые части. Я вложил весь код в случае, и это дало мне столько синтаксических ошибок, которые даже не имели смысла. В основном заменить; с, и тому подобное. Я сделал это, и код хорошо не использовался –

ответ

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 
      } 

     } 
     }); 
+0

Я получаю эту странную ошибку, Синтаксическая ошибка на токене «case», утверждают ожидаемые. Ошибка синтаксиса на токене ":", ";" ожидается. И Метод setActualDefaultRingtoneUri (контекст, INT, Uri) в типе RingtoneManager не применяется для аргументов (новый AdapterView.OnItemClickListener() {}, INT, Uri) –

+0

@Sabroan вставьте новый код –

+0

отредактированные код , Я использую стиль представления списка из ресурсов android, simple_list_item_1 –

Смежные вопросы