0

ユーザーがアプリを通じてお気に入りの連絡先に電話できるアプリを作成しています。通話が開始されると、スピーカーがオンになります。このインテントを使用して電話をかけるには。

               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

わかりましたので、動作させました。

インテント フィルターを変更して、アクションが 1 つだけになるようにしました

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

TelephonyManager が Offhook 状態のときは、audioManager モードを設定します

audioManager.setMode(AudioManager.MODE_IN_CALL);

スピーカーをオンにする直前に、それは機能します。

アップデート

アプリが実行されていないときでも機能していましたが、アプリケーションが機能していない場合でもこの質問 My Broadcast receiver get execute onDestroy。

于 2013-02-25T12:09:27.850 に答える