2011-12-23 22 views
6

Yêu cầu của tôi là bật loa ngoài bất cứ khi nào một cuộc gọi đi được thực hiện. Tôi đã thử đoạn mã sau, nhưng nó không hoạt động. Trên thực tế, loa sẽ bật khi đang ở giữa cuộc gọi, cuộc gọi thứ hai sẽ đến!Bật loa ngoài bất cứ khi nào cuộc gọi đi được thực hiện

package in.co.allsolutions; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
//import android.view.View; 
import android.widget.Toast; 
import android.media.AudioManager; 

public class MyTelephonyBroadcastReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
      audioManager.setSpeakerphoneOn(true); 
      Bundle extras = intent.getExtras();    
      if (extras != null) { 

        String state = extras.getString(TelephonyManager.EXTRA_STATE); 
        Log.i("AS", "Message Received. State = " + state + ", Mode = " + audioManager.getMode()); 
        //audioManager.setMode(AudioManager.MODE_NORMAL); 
        //audioManager.setSpeakerphoneOn(true); 
//     if (state.equals("OFFHOOK")) 
//     {     
        //audioManager.setMode(AudioManager.MODE_CURRENT); 
        //audioManager.setSpeakerphoneOn(true); 
        //audioManager.setMode(AudioManager.MODE_IN_CALL); 
        //audioManager.setSpeakerphoneOn(true); 
        //audioManager.setMode(AudioManager.MODE_RINGTONE); 
        //audioManager.setSpeakerphoneOn(true); 
        if (audioManager.isSpeakerphoneOn()) { 
         Log.i("AS", "Speaker on - SUCCESS."); 
        } else { 
         Log.i("AS", "Speaker could not be turned on."); 
        } 
//     } 
      } else { 
        Toast.makeText(context, "Message Received without any state", Toast.LENGTH_LONG).show(); 
      } 
     } 
} 

Cảm ơn.

+0

Tôi đã tìm thấy câu hỏi tương tự ở đây, cũng không được trả lời: http://www.anddev.org/novice-tutorials-f8/how-to-programmatically-turn-on-loudspeaker-when-make-receiv- t49421.html. Có phải là một lỗi trong Android? – AllSolutions

+0

Xem câu trả lời của tôi ở đây: http://stackoverflow.com/a/25346769/2826409 –

Trả lời

5

Một câu hỏi tương tự đã được hỏi và trả lời here.

Tôi nghĩ rằng câu trả lời có thể nằm trong AndroidManifest.xml của dự án của bạn. Hãy thử thêm:

uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" 

vào tệp kê khai, cho phép ứng dụng sửa đổi cài đặt âm thanh của thiết bị.
Bạn cũng sẽ cần phải thay đổi chế độ AudioManager của bạn để MODE_IN_CALL:

audioManager.setMode(AudioManager.MODE_IN_CALL) 
9

Bạn có thể đặt nó thông qua lập trình như sau:

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_IN_CALL); 
audioManager.setSpeakerphoneOn(true); 

Nhưng, hãy nhớ rằng không quên để thiết lập loa tắt khi dừng cuộc gọi:

audioManager.setSpeakerphoneOn(false); 

Và, Set phép trong manifest:

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

Mã này hoạt động tốt đối với tôi. Hy vọng sẽ hữu ích cho bạn.

+0

Cảm ơn. Trong Kitkat 4.4.2 sự cho phép RECORD_AUDIO là không cần thiết, tôi không thể nói cho các phiên bản Android khác .. –

Các vấn đề liên quan