2011-03-23 1 views
7

나는 RingtoneManager를 사용하고 있으며 일부 전화기에서는 항상 null을 반환합니다. 사운드가 조용하거나 음색을 찾지 못하면 null을 반환한다는 것을 알고 있습니다. 소리가 켜져 있고 소리가 들리면 null이 반환되는 이유는 무엇입니까?null ringtone을 반환하는 RingtoneManager

Ringtone ringtone; 
ringtone = RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
if(ringtone == null) 
{ 
    Log.d("Debug", "ringtone is null"); 
} 
else 
{ 
    ringtone.play(); 
} 

나는 모든 권한이 벨소리를 재생 (내 휴대 전화에서 작동), 심지어 SD 카드 권한이 있어야 활성화 : 코드는 여기에

내가 사용하고 무엇을 .... 내 넥서스 S에서 작동 벨소리가 SD 카드에있는 경우에만 사용할 수 있습니다. 이견있는 사람?

+0

에 따르면 RingtoneManager의 소스 코드. getRingtone이 null을 반환하는 유일한 경우는 지정된 URI의 벨소리를 열 수없는 경우입니다. 또한''ringtone을 열지 못했습니다 '+ ringtoneUri'을 logcat에 넣어야합니다. 당신은 logcat 출력에 그러한 라인을 보았습니까? –

+0

내 것은 아니지만 일부 사용자는 벨소리가 실행되지 않는다고 불평하고 있습니다. NULL 체크를하기 전에 역 참조 된 포인터 때문에 충돌이 발생했습니다. 내가 생각할 수있는 유일한 생각은 URI를 얻을 수 없다는 것입니다. 그러나 유효한 벨소리가있을 때 왜 그렇게 할 수 없는지 모르겠습니다. 어쩌면 자원 잠금 장치일까요? – atomicbaum

답변

8

나는 그저 문제가 무엇인지에 빠져 있습니다.

RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 

반환 null : 알림 기능을 소리처럼 사용자가 "침묵"을하는 경우. 그래서 일부 사용자 만이 문제를 발견 할 수 있습니다.

+0

이 답변으로 몇 시간을 절약 할 수있었습니다. 사용하고 있던 AVD가 보드 전체에 걸쳐 모든 사운드 설정을 가지고 있음이 드러났습니다. 그럼 위의 답변을 읽고 응용 프로그램이 내 실제 전화에서 작동하는 것으로 나타났습니다. – Lori

8

외부 저장소에 저장된 휴대 전화로 코스튬 사운드를 복사하면 앱에 외부 저장소에 대한 액세스 권한이없는 경우 벨소리 관리자가 열 수 없습니다. 매니페스트 파일에 권한이없는 추가

: costum의 정확한 제목을받지 동안

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

는이를 알아 내기 위해 좀 시간이 걸렸다는 일부 사용자가 자신의 기기에 미친 벨소리

+0

고마워요 !!! 마침내 당신의 게시물을 찾을 때까지이 문제를 해결하기 위해 수 시간을 보냈습니다! – qkx

+0

고마워요! 귀하의 게시물을 발견했기 때문에이 문제를 해결하는 데 몇 시간을 소비하지 않았습니다! –