2011-10-06 3 views
19

나는 여기에서 해결책을 찾으려고 노력하지만, 내가 선택기를 호출 할 때 코드가 아니라 자신/선택된 파일에 대한 해결책 만있다. 나는 사용자 버튼을 누르면 다음 코드를 사용하여RingtoneManager.ACTION_RINGTONE_PICKER로 벨소리를 설정하는 방법은 무엇입니까?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:"); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 
ActivityCurrent.this.startActivityForResult(intent,999); 

이 쇼 벨소리 선택 도구는 사용자가 원하는 것을 벨소리를 선택할 수 있지만 두 가지 그리워 : 를 - 그것을하지 -이 나던 현재 벨소리를 할 때 개방 보여 이


난 아직 방법이 선택되어 현재 벨소리로 RINGTONE_PICKER을 여는 방법을 찾을 할수 없어 확인

에 클릭하면 벨소리를 저장합니다. 어떤 생각?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:"); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 
ActivityCurrent.this.startActivityForResult(intent,999); 

답변

20

그런 다음, 사용자의 선택에서 결과를받을 수 onActivityResult()을 구현 저장해야합니다. 여기

if (resultCode == RESULT_OK) { 
    Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
    if (uri != null) { 
    String ringTonePath = uri.toString(); 
} 

예 : http://www.ceveni.com/2009/07/ringtone-picker-in-android-with-intent.html

편집 : 갱신

RingtoneManager.setActualDefaultRingtoneUri(
    myActivity, 
    RingtoneManager.TYPE_RINGTONE, 
    uri); 

당신은 호출해야이 :

+0

감사합니다. 그러나 이것은 경로를 잡는 방법입니다. 하지만 방법을 모르겠습니다. -이 설정을 저장하는 방법은 무엇입니까? - 현재 벨소리가 열렸을 때 표시하는 방법은 무엇입니까? – Michalsx

+0

그냥 소스 업데이트, 나는 이미 알고 있다고 생각 : –

+0

친애하는 Xjaphx :) 대단히 감사합니다, 당신은 나를 구 했어요 :)이 코드는 필요한대로 작동합니다. – Michalsx

12
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone); 
startActivityForResult(intent , 1); 

"벨소리"하는 내가 저장하고있는 URI입니다 선택된 음색은 onActivityResult()입니다.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) { 
     case 1: 
      ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

      // Toast.makeText(getBaseContext(),RingtoneManager.URI_COLUMN_INDEX, 
      // Toast.LENGTH_SHORT).show(); 
      break; 

     default: 
      break; 
     } 
    } 
} 

희망이 있습니다. 그럴 경우 응답하라.

+0

당신이 내 시간을 절약! 작동합니다 .. 당신이이 을 일하고 –

+0

감사합니다 감사합니다하지만 우리는 기본 사운드 RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI에 그 시간 선택을 우리의 원시 파일 URI를 추가 한 경우 벨소리를 다시 후 선택 받고 있지 않습니다 picker. –

+0

너는 나에게 말해 줄 수 있니? –

4

코드는 완벽하며 저에게 효과적입니다. 그러나 필요한 사용 권한을 언급하는 것을 잊었습니다. 이 코드를 사용해보십시오. 도움이 되셨습니다.

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission> 
+0

뿌리 박힌 장치에서'android.permission.WRITE_SETTINGS' 권한 만 필요합니다. 근데 ​​뿌리가없는 장치에 대해서는 모른다. – ChuongPham

+0

오! .. 나는 내 생각에 별다른 관심을 보이지 않았다. 그래서 나는이 세 가지를 모두 작동시켜야했다. –

4

이 코드는 벨소리 선택 도구를 사용할 때 사용자가 이전에 설정 한 기본 벨소리를 표시합니다.

아래의 코드를 사용하여 벨소리 의도를 지정하십시오.

public void pickRingtone(View view) { 
     // TODO Auto-generated method. stub 

     Intent intent = new.  Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, 
       RingtoneManager.TYPE_RINGTONE); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone"); 

    // for existing ringtone 
     Uri urie =  RingtoneManager.getActualDefaultRingtoneUri(
       getApplicationContext(), RingtoneManager.TYPE_RINGTONE); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie); 

    startActivityForResult(intent, 5); 
} 
관련 문제