2012-03-15 2 views
0

내 애플리케이션에서 발신 및 수신 전화 및 텍스트 전에 사용자에게 확인을 요청하는 알림 또는 그 종류의 것을 생성해야합니다. 나는 NEW_OUTGOING_CALL으로 끝났으며 나는 단지 Toast msg를 사용할 수있다.안드로이드에서 수신 및 발신 전화 및 텍스트보다 먼저 경고 또는 임의의 UI를 생성 할 수 있습니까

+0

입니다 수 있다면 가장 좋은 것입니다. 일반적인 경로는 브로드 캐스트 리시버를 사용하는 것입니다. 그러나 사용자가 다른 작업을 할 때 사용자 지정 UI를 표시하면 일반적으로 매우 나쁜 생각입니다. – Snicolas

+0

난 그냥 사용자가 처음부터 사용자가 걸리는 특정 번호로 전화를 걸고 싶은지 재확인하라고하고 싶습니다. 그리고 나가는 호출에서 내 응용 프로그램을 여는 데 broadcastreceiver를 사용했지만 일시 중지 할 수 없었습니다. 전화 프로세스 ... 도와주세요. – Kishore

답변

1

당신은 휴대 전화 상태를 듣고 ITelephone.aidl과 장소 이벤트를 사용할 수 있습니다. 전화 통화 처리 (전화 걸기 방법에 대한 간략한 설명 포함)에 도움을 드리고자합니다. SMS도 비슷한 방식으로 발생합니다. 당신이 원하는 무엇을 더 설명하고 당신이했던 연구하고 그것을

import com.android.internal.telephony.ITelephony; 
import android.os.IBinder; 
import android.widget.Toast; 
import android.telephony.TelephonyManager; 
import android.telephony.PhoneStateListener; 

public class CallMonitor 
{ 
    protected StateListener phoneStateListener; 
    //stops the service to monitor any call. 
    public void stopMonitor() 
    { 
     try 
     { 
      TelephonyManager telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
      telephonymanager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); 
      phoneStateListener=null; 
      Toast.makeText(this, "Call Monitoring Stopped", Toast.LENGTH_SHORT).show(); 
     } 
     catch (Exception e) 
     { 

     }  
    } 

    public void startMonitor() 
    { 
     try 
     { 
      phoneStateListener = new StateListener(); 
      TelephonyManager telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
      telephonymanager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
      Toast.makeText(this, "Call Monitoring Started", Toast.LENGTH_SHORT).show();    
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public IBinder onBind(Intent arg0) 
    { 
     return null; 
    } 


    class StateListener extends PhoneStateListener 
    { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) 
     { 
      super.onCallStateChanged(state, incomingNumber); 
      switch(state) 
      { 
       case TelephonyManager.CALL_STATE_RINGING: 

         Context context = getApplicationContext(); 
         try 
         { 
          TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
          Class c = Class.forName(manager.getClass().getName()); 
          Method m = c.getDeclaredMethod("getITelephony"); 
          m.setAccessible(true); 
          ITelephony telephony = (ITelephony)m.invoke(manager); 
          telephony.endCall(); 
         } 
         catch(Exception e) 
         { 
          Toast.makeText(context, "Error ending the call" + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 
        break; 
       case TelephonyManager.CALL_STATE_OFFHOOK: 
        break; 
       case TelephonyManager.CALL_STATE_IDLE: 
        break; 
      } 
     } 
    }; 
} 

권한에 대해 알아

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
+1

kishu 도움을 많이 주셔서 감사합니다. 그러나 BroadcastReceiver를 사용하여보다 효율적으로 작업했습니다. – Kishore

+0

@Kishore를 알려 주셔서 감사합니다. 정확히 무엇이 BroadcastReceiver의 효율성을 확신하게되었는지 이해할 수 있습니까? 내 응용 프로그램에서는이 코드를 사용하여 1/4 초 동안 전화벨이 울리도록 처리합니다. 너는 무엇을 관찰 했는가? – kishu27

+0

늦게 답장을 드려 죄송합니다 ... 실제로 BroadcastReceiver의 프로세스는 작업을 수행하기 전에 해당 메시지를 각각 브로드 캐스트합니다. 따라서 BroadcastReceiver는 동작이 수행되기 전에 트리거됩니다. 따라서 호출하기 전에 호출을 처리 할 수 ​​있습니다. – Kishore

0

나는이 분야에서 일 해본 적이 없지만 PhoneStateListener 인터페이스를 사용할 수 있습니다. 전화 상태가 변경되면 기능을 호출합니다 .... Telephony Manager도 유용 할 수 있습니다.

도움이 내 옆에 희망에서 불과 시도

,

관련 문제