2012-06-30 2 views
2

Android 4 (ICS)에서 알림을 수신 할 때 전화벨이 울리지 만 소리를 재생하지 못하게하는이 간단한 앱을하려고합니다. 이를 위해 링/알림 스트림을 0 (음소거)으로 설정합니다. 전화를받을 때 벨소리 볼륨을 최대 (p.e. 7)로 설정 한 다음 유휴 상태에서 다시 0 (음소거)으로 되돌립니다.RINGING 동안 STREAM_RING에 대한 Android setStreamVolume이 항상 작동하지 않는 경우

이렇게하려면이 간단한 코드를 사용합니다.

public class ReceiverClass extends BroadcastReceiver 
{ 
    @Override public void onReceive(Context context, Intent intent) 
    {  
     if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) 
     { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);  
     AudioManager amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

     if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) 
     { amanager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);   
     } 
     else if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
     { amanager.setStreamVolume(AudioManager.STREAM_RING, 7, 0);   
     }   
     } 
    } 
} 

문제는 언젠가는 작동하며 언젠가는 그렇지 않다는 것입니다. 나는 이유를 찾을 수 없다. 나는 나 자신을 열 번 부르고 반지는 아마도 6 번 소리가 난다. 다른 4 명은 소리가 나지 않았다. 이상한??

내 응용 프로그램이 setStreamVolume을 7로 호출하는 데 "너무 오래 걸릴 수 있음"을 이해하므로 호출이 너무 길기 때문에 (때로는 소리가 들릴 수도 있고 때로는 너무 늦음) 소리가 나지 않을 수도 있습니다. 0 볼륨으로 이미 시작되었습니다. 그래서, 울리는 소리를 다시 시작하는 방법이 있습니까? 아무도 이걸 도와 줄 수 없나요? 감사.

답변

0

브로드 캐스트 수신기에 높은 우선 순위를 부여해야한다고 말해야합니다. 이는

<intent-filter android:priority="1000"> 
    <action android:name="android.intent.action.PHONE_STATE" /> 
</intent-filter>  

링크 >> 그것은/당신의 문제를 해결할 수 있습니다 Highest priority

을 참조 아래처럼 할 수 있습니다.

+0

이미 동일한 결과가있었습니다. 고마워, 어쨌든 ;-) – Ton

+0

나는 (MediaPlayer를 사용하여) 나 자신을 기본 벨소리로 재생하려고 시도했다. 안드로이드가 실패하고 울리지 않을 때 이것은 꽤 잘 작동합니다. 그러나 실패하지 않으면 두 벨소리가 동시에 겹쳐서 약간의 소리가 들리므로 결과가 끔찍합니다. 안드로이드 벨소리를 멈추고 (켜져있는 경우를 대비하여) 내 작업을 시작하는 방법을 알고 싶습니다. – Ton

+1

다음 클래스가 문제의 원인입니다 : [Ringer] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.4.2_r1/com/android /phone/Ringer.java#Ringer) 볼륨을 0으로 설정하기 전에 링 볼륨이 0으로 설정되면 반환합니다. – Matware