Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidでプログラムで着信に応答するにはどうすればよいですか?


この例は、Androidでプログラムによって着信に応答する方法を示しています。

ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。

ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
   xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:tools="https://schemas.android.com/tools"
   xmlns:app="https://schemas.android.com/apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello World!"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

ステップ3 −次のコードをsrc / MainActivity.java

に追加します
package 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 extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      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 intent = 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(intent);
      }
   }
}

ステップ4 −次のコードをsrc / AcceptCallActivity.java

に追加します
package 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));
   private static final String MANUFACTURER_HTC = "HTC";
   private KeyguardManager keyguardManager;
   private AudioManager audioManager;
   private CallStateReceiver callStateReceiver;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
      audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
   }
   @Override
   protected void onResume() {
      super.onResume();
      registerCallStateReceiver();
      updateWindowFlags();
      acceptCall();
   }
   @Override
   protected void onPause() {
      super.onPause();
      if (callStateReceiver != null) {
         unregisterReceiver(callStateReceiver);
         callStateReceiver = null;
      }
   }
   private void registerCallStateReceiver() {
      callStateReceiver = new CallStateReceiver();
      IntentFilter intentFilter = new IntentFilter();
      intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
      registerReceiver(callStateReceiver, intentFilter);
   }
   private void updateWindowFlags() {
      if (keyguardManager.inKeyguardRestrictedInputMode()) {
         getWindow().addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
      } 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.isWiredHeadsetOn();
      if (broadcastConnected) {
         broadcastHeadsetConnected(false);
      }
      try {
         try {
            Runtime.getRuntime().exec("input keyevent " + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));
         }
         catch (IOException e) {
            String enforcedPerm = "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, enforcedPerm);
            sendOrderedBroadcast(btnUp, enforcedPerm);
         }
      }
      finally {
         if (broadcastConnected) {
               broadcastHeadsetConnected(false);
         }
      }
   }
   private void broadcastHeadsetConnected(boolean connected) {
      Intent i = new Intent(Intent.ACTION_HEADSET_PLUG);
      i.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
      i.putExtra("state", connected ? 1 : 0);
      i.putExtra("name", "mysms");
      try {
         sendOrderedBroadcast(i, null);
      }
      catch (Exception e) {
      }  
   }
   private class CallStateReceiver extends BroadcastReceiver {
      @Override
      public void onReceive(Context context, Intent intent) {
         finish();
      }
   }
}

ステップ5 −次のコードをManifests / AndroidManifest.xml

に追加します
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"  package="com.app.sample" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme" >
      <activity android:name=".MainActivity" >
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

アプリケーションを実行してみましょう。実際のAndroidモバイルデバイスをコンピューターに接続していると思います。 Android Studioからアプリを実行するには、プロジェクトのアクティビティファイルの1つを開き、ツールバーの[実行]アイコンをクリックします。オプションとしてモバイルデバイスを選択し、デフォルトの画面を表示するモバイルデバイスを確認します-

Androidでプログラムで着信に応答するにはどうすればよいですか?


  1. プログラムでアプリケーションを終了する方法は?

    この例は、Androidでプログラムによってアプリケーションを終了する方法を示しています。 ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。 ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="ht

  2. Android で偽の着信を設定する方法

    特定の会話を避けたい場合や、退屈で退屈なパーティーから早く離れたい場合がありますが、私たちの社会的規範と価値観は私たちをそれから引き離します.幸いなことに、Google Play ストアには、本物そっくりの偽の電話であらゆる状況から安全に救ってくれるサードパーティ製のアプリがたくさんあります。さらに、偽の電話アプリを使用すると、友達にいたずらをしたり、楽しんだりすることができます。 そのため、ここでは、Android で偽の着信を設定するのに役立ついくつかのアプリについて説明します。 偽の電話 評価: 4.6スター 価格: 無料 フェイクコールを使えば、ぎこちない会話や退屈な会議か