Computer >> Máy Tính >  >> Lập trình >> Android

Làm thế nào để trả lời cuộc gọi đến theo chương trình trong Android?

Ví dụ này trình bày cách trả lời cuộc gọi đến theo chương trình trong Android.

Bước 1 - Tạo một dự án mới trong Android Studio, đi tới Tệp ⇒ Dự án Mới và điền tất cả các chi tiết cần thiết để tạo một dự án mới.

Bước 2 - Thêm mã sau vào res / layout / activity_main.xml.

    
  Bước 3  - Thêm mã sau vào src / MainActivity.java 

 package com.app.sample; import androidx.appcompat.app.AppCompatActivity; nhập android.content.Context; nhập android.content.Intent; nhập android.os.Build; nhập android.os.Bundle; public class MainActivity mở rộng AppCompatActivity {@Override được bảo vệ void onCreate (Gói đã lưuInstanceState) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); } public void acceptCall () {Context context =null; if (Build.VERSION.SDK_INT> =21) {Intent 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 {Intent Ý định =new Intent (context, AcceptCallActivity.class); ý định.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); ý định.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity (ý định); }}} 

Bước 4 - Thêm mã sau vào src / AcceptCallActivity.java

 gói com.app.sample; nhập android.app.Activity; nhập android.app.KeyguardManager; nhập android.content.BroadcastReceiver; nhập android.content.Context; nhập android.content.Intent; nhập android.content. IntentFilter; nhập android.media.AudioManager; nhập android.os.Build; nhập android.os.Bundle; nhập android.telephony.TelephonyManager; nhập android.view.KeyEvent; nhập android.view.WindowManager; nhập java.io.IOException; import java.util.logging.Logger; public class AcceptCallActivity mở rộng Activity {private static Logger logger =Logger.getLogger (String.valueOf (AcceptCallActivity.class)); chuỗi cuối cùng tĩnh riêng MANUFACTURER_HTC ="HTC"; riêng KeyguardManager keyguardManager; AudioManager audioManager riêng tư; CallStateReceiver riêng callStateReceiver; @Override được bảo vệ void onCreate (Gói đã lưuInstanceState) {super.onCreate (saveInstanceState); keyguardManager =(KeyguardManager) getSystemService (Context.KEYGUARD_SERVICE); audioManager =(AudioManager) getSystemService (Context.AUDIO_SERVICE); } @Override được bảo vệ void onResume () {super.onResume (); registerCallStateReceiver (); updateWindowFlags (); acceptCall (); } @Override được bảo vệ void onPause () {super.onPause (); if (callStateReceiver! =null) {unregisterReceiver (callStateReceiver); callStateReceiver =null; }} private void registerCallStateReceiver () {callStateReceiver =new CallStateReceiver (); IntentFilter aimFilter =new IntentFilter (); ý địnhFilter.addAction (TelephonyManager.ACTION_PHONE_STATE_CHANGED); registerReceiver (callStateReceiver, Ý địnhFilter); } private void updateWindowFlags () {if (keyguardManager.inKeyguardRestrictedInputMode ()) {getWindow (). addFlags (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TFLEN_SCREEN_LayoutParams.FLAG_TFLEN_SCREEN_Layout | } else {getWindow (). clearFlags (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); }} private void acceptCall () {boolean broadcastConnected =MANUFACTURER_HTC.equalsIgnoreCase (Build.MANUFACTURER) &&! audioManager.isWosystemHeadsetOn (); if (broadcastConnected) {broadcastHeadsetConnected (false); } thử {try {Runtime.getRuntime (). execute ("input keyevent" + Integer.toString (KeyEvent.KEYCODE_HEADSETHOOK)); } catch (IOException e) {StringosystemcedPerm ="android.permission.CALL_PRIVILEGED"; Intent 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, cưỡng chếPerm); sendOrderedBroadcast (btnUp, cưỡng chếPerm); }} cuối cùng {if (broadcastConnected) {broadcastHeadsetConnected (false); }}} private void broadcastHeadsetConnected (boolean đã kết nối) {Intent i =new Intent (Intent.ACTION_HEADSET_PLUG); i.addFlags (Intent.FLAG_RECEIVER_REGISTERED_ONLY); i.putExtra ("trạng thái", kết nối? 1:0); i.putExtra ("tên", "bí ẩn"); thử {sendOrderedBroadcast (i, null); } catch (Exception e) {}} private class CallStateReceiver mở rộng BroadcastReceiver {@Override public void onReceive (Bối cảnh ngữ cảnh, Mục đích ý định) {finish (); }}} 

Bước 5 - Thêm mã sau vào Manifests / AndroidManifest.xml

            

Hãy thử chạy ứng dụng của bạn. Tôi giả sử bạn đã kết nối thiết bị Di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ studio android, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào biểu tượng Run từ thanh công cụ. Chọn thiết bị di động của bạn làm tùy chọn, sau đó kiểm tra thiết bị di động sẽ hiển thị màn hình mặc định của bạn -

Làm thế nào để trả lời cuộc gọi đến theo chương trình trong Android?