2014-04-08 4 views
1

내 안드로이드 애플 리케이션에서 내장 된 음색에서 알림 음을 선택하는 코드를 추가했습니다.하지만 sd 카드의 노래도 선택하는 옵션을 하나 더 추가해야합니다. 또한 음악 파일 만 선택하는 조건을 추가하는 것이 좋습니다. 줘요sd 카드에서 벨소리 선택 android

public boolean onOptionsItemSelected(MenuItem item) 
    { 
     Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone"); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null); 
     this.startActivityForResult(intent, 5); 
     return true; 
    } 
@Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) 
    { 
     if (resultCode == Activity.RESULT_OK && requestCode == 5) 
     { 
       Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

       if (uri != null) 
       { 
        this.chosenRingtone = uri.toString(); 
       } 
       else 
       { 
        this.chosenRingtone = null; 
       } 
        DatabaseHandler1 dbtone = new DatabaseHandler1(getApplicationContext()); 
        int count = dbtone.getRowCount_5(); 
        if(count > 0){ 
        dbtone.resetTables_5(); 
        } 
       dbtone.addUser_5(chosenRingtone); 
      }    
     } 

내가이 그것을이 코드를하려고 모든 미디어 파일을 당신에게

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 
     //your projection statement 
     String[] projection = { 
       MediaStore.Audio.Media._ID, 
       MediaStore.Audio.Media.ARTIST, 
       MediaStore.Audio.Media.TITLE, 
       MediaStore.Audio.Media.DATA, 
       MediaStore.Audio.Media.DISPLAY_NAME, 
       MediaStore.Audio.Media.DURATION, 
       MediaStore.Audio.Media.ALBUM_ID 
     }; 
     //query 
     cursor = this.managedQuery(
       MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
       projection, 
       selection, 
       null, 
       null); 


     while(cursor.moveToNext()){ 
       songs.add(cursor.getString(0)); 
       songs.add(cursor.getString(1)); 
       songs.add(cursor.getString(2)); 
       songs.add(cursor.getString(3)); 
       songs.add(cursor.getString(4)); 
       songs.add(cursor.getString(5)); 
       album_id.add((long) cursor.getFloat(6)); 
     } 
     int a[]= new int[]{R.id.textView1 ,R.id.textView3};//, R.id.textview2}; 
     ListAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.items, cursor, new String[]{MediaStore.Audio.Media.TITLE,   MediaStore.Audio.Media.ARTIST/*, MediaStore.Audio.Media.DURATION*/} ,a); 
       setListAdapter(adapter); 
    } 
+0

을 사용하여 벨소리를 설정하십시오. 내 대답은 도움이됩니다 ... ...? –

답변

0

을 벨소리를 설정하고 내 응용 프로그램에 코드를 제공하고 도와주세요 당신이 벨소리로 오디오 파일의 노래를 설정하는 데 도움이됩니다 :

File path = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone 

ContentValues values = new ContentValues(); 
values.put(MediaStore.MediaColumns.DATA, path.getAbsolutePath()); 
values.put(MediaStore.MediaColumns.TITLE, "My Song title"); 
values.put(MediaStore.MediaColumns.SIZE, 215454); 
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 
values.put(MediaStore.Audio.Media.ARTIST, "Madonna"); 
values.put(MediaStore.Audio.Media.DURATION, 230); 
values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); 
values.put(MediaStore.Audio.Media.IS_ALARM, false); 
values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

//Insert it into the database 
Uri uri = MediaStore.Audio.Media.getContentUriForPath(path.getAbsolutePath()); 
Uri newUri = main.getContentResolver().insert(uri, values); 

RingtoneManager.setActualDefaultRingtoneUri(
    myActivity, 
    RingtoneManager.TYPE_RINGTONE, 
    newUri 
); 
+0

그것이 당신에게 도움이되기를 희망합니다, 당신이 대답에 만족한다면 그것은 대답하고 모든 최선을 표시함으로써 질문을 닫으십시오 :) – codeRider

0

을 줄 것이다 여기

DatabaseHandler1 db2 = new DatabaseHandler1(context); 
     int count = db2.getRowCount_5(); 
      if(count > 0){ 
     x =db2.getUserDetails_5(); 
     String temp = x.get("tone"); 
       try{ 
        notification.sound = Uri.parse(temp); 
        } 
       catch (Exception e) { 
        notification.defaults |= Notification.DEFAULT_SOUND; 

        } 
      } 
      else{ 
     // Play default notification sound 
     notification.defaults |= Notification.DEFAULT_SOUND; 
      } 
0

는 다음과 같은 코드를 사용할 수 있습니다, 오디오 파일을 외부 SD 카드를 검색하려면이 들어

public ArrayList<File> findAllMP3s() { 
    static File storage = Environment.getExternalStorageDirectory(); 
    ArrayList<File> allFiles = new ArrayList<File>(); 

    recursiveAudioFinder(storage, allFiles); 

    return allFiles; 
} 

public static void recursiveAudioFinder(File directory, ArrayList<File> data>) { 
    if(directory == null) { 
     return; 
    } 
    File[] files = directory.listFiles(); 
    for(File file: files) { 
     // Grab audio files, write some filter to check if audio file 
     if(file.isFile() && file.getAbsolutePath().endsWith(".mp3")) { 
      data.add(file); 
     } else if(file.isDirectory()) { 
      // Recursive call to find files in sub directories 
      recursiveAudioFinder(directory, data); 
     } 
    } 
} 

이 작동하려면, 권한 READ_EXTERNAL_STORAGE 추가해야합니다. 목록에있는 파일 중 하나를 선택하고 RingtoneManager

관련 문제