2012-07-26 2 views
1

녹음 통화 (수신 전화와 발신 전화 모두)하는 앱을 만들고 있습니다.발신 전화가 수락되는지 여부를 알 수있는 방법이 있습니까?

나는 방금 들어오는 호출로부터 오디오를 녹음하는 문제를 해결했지만 나가는 호출에 문제가 있음을 발견했습니다.

내 상황은 다음입니다. 전화를 받았을 때만 오디오를 녹음하고 싶지만 어떻게해야할지 모르겠습니다. 방금 PhoneStateListener 클래스를 사용하여 시도했지만 호출이 수락되면 호출 상태가 변경되지 않습니다. 나는 다음 코드했습니다 : 전화가 나가는 경우, 이전 코드에서

package com.call.record.listeners; 

import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 

public class OutgoingPhoneStateListener extends PhoneStateListener{ 

    private String phoneNumber; 

    public OutgoingPhoneStateListener(String pn) { 
     // TODO Auto-generated constructor stub 
     super(); 
     phoneNumber = pn; 
    } 

    public void onCallStateChanged(int state, String incomingNumber){ 

     switch(state){ 
      case TelephonyManager.CALL_STATE_IDLE: 
       Log.d("DEBUG", "IDLE"); 
      break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Log.d("DEBUG", "OFFHOOK"); 
      break; 
      case TelephonyManager.CALL_STATE_RINGING: 
       Log.d("DEBUG", "RINGING"); 
      break; 
     } 
    } 
} 

나는 전화가 응답되었을 때 알아내는 비 hackish/강력한 방법이 있다고 생각하지 않습니다

답변

0

다른 파티. CALL_STATE_OFFHOOKMODE_IN_CALL (AudioManager)은 상대방이 응답 할 때가 아니라 전화가 오자마자 설정됩니다.

수행 할 수있는 작업은 기록 된 다운 링크 데이터를 즉각적으로 처리하여 통화 응답 시간을 감지하는 것입니다. 다 른 상대방이 음성 데이터를 분석하여 감지하여 대화가 언제 시작되었는지 확인할 수있는 일종의 인사말로 답변하기를 바랍니다. 또는 업 링크를보고 상대방이 대답하기 전에 대화를 시작할 가능성이 없으므로 대화에 시작 신호로 마이크에 대고 말하는 첫 번째 단어를 사용할 수 있습니다.

-1

전적으로 Michael에 동의합니다. 전화가 안드로이드에서 calle로 응답되었을 때 확고한 방법은 없습니다. 즉 TelephonyManager입니다. CALL_STATE_OFFHOOK은 전화하는 즉시 설정됩니다.

는 이해이 예제를 시도

public class BroadcastReceiverImpl extends BroadcastReceiver{ 

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

     Toast.makeText(context, "Monitoring The Network !! ", Toast.LENGTH_LONG).show(); 
     PhoneStateListnerImpl phoneStateListnerImpl = new PhoneStateListnerImpl(context); 
     TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); 

      telephonyManager.listen(phoneStateListnerImpl, PhoneStateListener.LISTEN_CALL_STATE); 


     } 

    private class PhoneStateListnerImpl extends PhoneStateListener{ 

     private Context mContext; 

     public PhoneStateListnerImpl(Context mContext) { 
      this.mContext = mContext; 
     } 


     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 

      switch (state) { 

      case TelephonyManager.CALL_STATE_RINGING: 
       Toast.makeText(mContext, "Phone is Ringng ", Toast.LENGTH_LONG).show(); 

       break; 

      case TelephonyManager.CALL_STATE_OFFHOOK: 
       Toast.makeText(mContext, "Phone is Answered ", Toast.LENGTH_LONG).show(); 

       break; 

      case TelephonyManager.CALL_STATE_IDLE: 
       Toast.makeText(mContext, "Call Is Over ", Toast.LENGTH_LONG).show(); 

       abortBroadcast(); 
       break; 

      default: 
       break; 
      } 
     } 

    } 
} 

manifest : 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pervazive.monitor_network_v08" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="16" /> 

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <receiver 
      android:name="com.example.broadcastreceiver.BroadcastReceiverImpl" 
      android:enabled="true" 
      android:exported="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.ACTION_PHONE_STATE_CHANGED" /> 
       <action android:name="android.intent.action.ACTION_NEW_OUTGOING_CALL" /> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 
관련 문제