0

我正在制作一个应用程序,用户可以通过我的应用程序呼叫他最喜欢的联系人。通话开始时,扬声器打开。为了使用此 Intent 拨打电话。

               Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel: "+contactnum.get(0)));
                startActivity(callIntent); 

当有一个外出呼叫时,会有一个启动 BroadcastReceiver 的 Intent

    <receiver android:name=".MyBroadcast">
    <intent-filter>

        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        <action android:name="android.intent.action.PHONE_STATE" />

    </intent-filter>
    </receiver>



public class MyBroadcast extends BroadcastReceiver{

    @Override
    public void onReceive(final Context context, Intent intent){
        // TODO Auto-generated method stub

        PhoneStateListener phoneStateListener = new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber){
                if(state == TelephonyManager.CALL_STATE_RINGING){
                }
                else if(state == TelephonyManager.CALL_STATE_IDLE){

                    AudioManager audioManager = (AudioManager) context
                            .getSystemService(Context.AUDIO_SERVICE);

                    audioManager.setSpeakerphoneOn(false);
                }
                else if(state == TelephonyManager.CALL_STATE_OFFHOOK){

                    AudioManager audioManager = (AudioManager) context
                            .getSystemService(Context.AUDIO_SERVICE);
                    audioManager.setSpeakerphoneOn(true);
                }
                super.onCallStateChanged(state, incomingNumber);
            }
        };
        TelephonyManager mgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        if(mgr != null){
            mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
        }
    }
}

如您所见,onReceive 会在需要时打开扬声器。

问题是扬声器并不总是打开,而只是在用户第一次通话时打开。奇怪的是,如果用户在应用程序运行时打电话但不是通过我的应用程序正常工作,扬声器每次都会打开。什么会导致这样的事情?

还有别的,即使应用程序没有运行,启动接收器的意图也会继续工作,所以当我拨打电话或接听电话时,尽管应用程序甚至没有运行,但它会转动扬声器。

4

1 回答 1

1

好的,所以我开始工作了。

我改变了意图过滤器,所以它只有一个动作

 <action android:name="android.intent.action.PHONE_STATE" />

当 TelephonyManager 处于摘机状态时,我设置了 audioManager 模式

audioManager.setMode(AudioManager.MODE_IN_CALL);

就在打开扬声器之前,它可以工作。

更新

所以当应用程序没有运行时它仍然工作,但后来我发现这个问题My Broadcast receiver get execute 即使我的应用程序不工作 ,我意识到我应该在我的主要活动中注册接收器并在活动中取消注册它销毁。

于 2013-02-25T12:09:27.850 回答