마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

미디어 경로 가지고 오는방법..

0 추천

일단 코드를 붙여 봅니다.

맨 밑의 아이템클릭이벤트에서

선택된 미디어의 경로값을 가지고와야 하는데

rm (링톤매니저가 )이 전달이 잘 안돼는지

오류가 발생합니다. 혹시나해서

rm선언부를 앞으로 더 빼보기도하고

클릭리스너안에서 재선언 해봤지만 오류를 뿜어냅니다..

혹시 경로 가지고 오는방법 아시는분 알려주세요...

 



package com.example.aaasda;

import java.util.ArrayList;
import java.util.List;

import android.media.RingtoneManager;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.database.Cursor;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity
{    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView)findViewById(R.id.LV1);
        
        List<String> list = new ArrayList<String>();
        
        RingtoneManager rm = new RingtoneManager(this);
        rm.setType(RingtoneManager.TYPE_RINGTONE);
        Cursor cursor = rm.getCursor();
               
        
        if (cursor.moveToFirst())
        {
            int count = cursor.getColumnIndex(rm.EXTRA_RINGTONE_TITLE);
            
            do
            {
                String MusicName = cursor.getString(count);
                //Toast.makeText(getBaseContext(), MusicName, Toast.LENGTH_SHORT).show();
                
                list.add(MusicName);                
            }while (cursor.moveToNext());
        }
        cursor.close();
        
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, list);
        lv.setAdapter(arrayAdapter);
        
        lv.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
            {
                Toast.makeText(getBaseContext(), String.valueOf(rm.getRingtoneUri(arg2)), Toast.LENGTH_SHORT).show();
                //String str = (String)arrayAdapter.getItem(arg2);
                //Toast.makeText(getBaseContext(), String.valueOf(MediaStore.Audio.Media.getContentUri(str)), Toast.LENGTH_LONG).show();
            }
        });
    }
 }

 

단아랑 (120 포인트) 님이 2013년 5월 8일 질문
오류가 발생하였을 떄는 로그에 남은 StackTrace를 함께 기록하여 주시는게 가장 좋습니다 ^^

정확한 답변일지는 모르겠으나..

getRingtoneUri에 넘어가는 파라미터 값을 document에서 보면 Cursor에서의 position이라고 나와있네요.

그런데 이미 RingtoneManager의 Cursor를 사용하시고 Cursor를 Close하셨는데요. 그 부분이 문제가 아닐까 조심스레 추측해 봅니다 @,.@

아래와 같이 사용해 보시면 어떨까요. Ringtone 대신 Alarm을 사용하는 예제입니다.

도움이 되었으면 좋겠네요 ^^



RingtoneManager ringtoneMgr = new RingtoneManager(this);
ringtoneMgr.setType(RingtoneManager.TYPE_ALARM);
Cursor alarmsCursor = ringtoneMgr.getCursor();
int alarmsCount = alarmsCursor.getCount();
if (alarmsCount == 0 && !alarmsCursor.moveToFirst()) {
    return null;
}
Uri[] alarms = new Uri[alarmsCount];
while(!alarmsCursor.isAfterLast() && alarmsCursor.moveToNext()) {
    int currentPosition = alarmsCursor.getPosition();
    alarms[currentPosition] = ringtoneMgr.getRingtoneUri(currentPosition);
}
alarmsCursor.close();

1개의 답변

0 추천
내용이 길다 그래서 댓글로 남겨요:)
Brann (1,320 포인트) 님이 2013년 5월 9일 답변
...