이 예는 Android에서 프로그래밍 방식으로 수신 전화에 응답하는 방법을 보여줍니다.
1단계 − Android Studio에서 새 프로젝트를 생성하고 파일 ⇒ 새 프로젝트로 이동하여 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.
2단계 − res/layout/activity_main.xml에 다음 코드를 추가합니다.
3단계 − src/MainActivity.java에 다음 코드 추가
패키지 com.app.sample;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;import android.content.Intent;import android.os.Build;import android.os.Bundle;public class MainActivity 확장 AppCompatActivity { @Override 보호 무효 onCreate(번들 storedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } 공개 무효 acceptCall() { 컨텍스트 컨텍스트 =null; if (Build.VERSION.SDK_INT>=21) { 의도 answerCalintent =new Intent(context, AcceptCallActivity.class); answerCalintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); answerCalintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(answerCalintent); } else { 의도 의도 =new Intent(context, AcceptCallActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(의도); } }}
4단계 − src/AcceptCallActivity.java에 다음 코드 추가
패키지 com.app.sample;import android.app.Activity;import android.app.KeyguardManager;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content. IntentFilter;import android.media.AudioManager;import android.os.Build;import android.os.Bundle;import android.telephony.TelephonyManager;import android.view.KeyEvent;import android.view.WindowManager;import java.io.IOException;import java.util.logging.Logger, public class AcceptCallActivity extends Activity { private static Logger logger =Logger.getLogger(String.valueOf(AcceptCallActivity.class)); 개인 정적 최종 문자열 MANUFACTURER_HTC ="HTC"; 개인 KeyguardManager keyguardManager; 개인 AudioManager audioManager; 개인 CallStateReceiver callStateReceiver; @Override protected void onCreate(Bundle storedInstanceState) { super.onCreate(savedInstanceState); keyguardManager =(KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); audioManager =(AudioManager) getSystemService(Context.AUDIO_SERVICE); } @Override 보호 무효 onResume() { super.onResume(); RegisterCallStateReceiver(); 업데이트윈도우플래그(); 수락 호출(); } @Override protected void onPause() { super.onPause(); if (callStateReceiver !=null) { unregisterReceiver(callStateReceiver); callStateReceiver =널; } } 비공개 무효 registerCallStateReceiver() { callStateReceiver =새로운 CallStateReceiver(); IntentFilter intentFilter =새로운 IntentFilter(); intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); registerReceiver(callStateReceiver, 인텐트 필터); } 비공개 무효 updateWindowFlags() { if (keyguardManager.inKeyguardRestrictedInputMode()) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_LOCKED_WHEN } else { getWindow().clearFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } } 개인 무효 acceptCall() { 부울 broadcastConnected =MANUFACTURER_HTC.equalsIgnoreCase(Build.MANUFACTURER) &&!audioManager.isWiredHeadsetOn(); if (broadcastConnected) { broadcastHeadsetConnected(거짓); } try { { Runtime.getRuntime().exec("입력 keyevent" + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK)); } catch(IOException e) { 문자열 시행Perm ="android.permission.CALL_PRIVILEGED"; 의도 btnDown =new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra( Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); Intent btnUp =new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra( Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); sendOrderedBroadcast(btnDown,forcedPerm); sendOrderedBroadcast(btnUp,forcedPerm); } } 마지막으로 { if (broadcastConnected) { broadcastHeadsetConnected(false); } } } 비공개 무효 broadcastHeadsetConnected(부울 연결) { 의도 i =new Intent(Intent.ACTION_HEADSET_PLUG); i.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); i.putExtra("상태", 연결됨 ? 1:0); i.putExtra("이름", "신비"); 시도 { sendOrderedBroadcast(i, null); } catch(예외 e) { } } private class CallStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { finish(); } }}
5단계 − Manifests/AndroidManifest.xml에 다음 코드 추가
응용 프로그램을 실행해 보겠습니다. 실제 Android 모바일 장치를 컴퓨터에 연결했다고 가정합니다. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고 도구 모음에서 실행 아이콘을 클릭합니다. 모바일 장치를 옵션으로 선택한 다음 기본 화면을 표시할 모바일 장치를 확인하십시오 -