web-dev-qa-db-ja.com

android)でプログラムで電話をかける方法

Androidアプリからプログラムでテスト目的で定期的に電話をかけたり受けたりしたいので、ネットワークから統計情報を収集します。そのため、アプリは頻繁に電話をかけ、電話に出るとアプリに電話をかけます。は数秒後に通話を終了します。ここから始めると、私が理解したコードが機能します。画面に触れることなく、指定した番号にダイヤルして電話をかけます。

public class MainActivity extends AppCompatActivity {

int MY_PERMISSIONS_REQUEST_CALL_PHONE = 101;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    call();
}

private void call() {

    try {

        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:2125551212"));
        System.out.println("====before startActivity====");



        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) !=
                PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CALL_PHONE},
                    MY_PERMISSIONS_REQUEST_CALL_PHONE);

            return;
        }

        startActivity(callIntent);
        System.out.println("=====getcallActivity==="+getCallingActivity());


    } catch (ActivityNotFoundException e) {
        Log.e("helloAndroid","Call failed",e);
    }
}

}

マニフェストには次の行があります。

私の理解によると、ACTION_CALLは、DIALボタンを押さなくても、指定した番号に電話をかける必要があります。しかし、これはACTION_DIALのように機能し、画面に番号を表示し、ユーザーはDIALボタンを押して電話をかける必要があります。では、ACTION_DIALとACTION_CALLの間に違いはありませんか?

いくつかの投稿を読んだ後、電話をかけるには6.0以降の許可をユーザーに要求する必要があることを理解しています(上記のコードで使用しました)

私の質問は、Lollipop(5.0)OSを使用している場合、ダイヤルせずに電話をかけることができるかどうかです。

8
Ram Ramesh

_ACTION_DIAL_

APIレベル1で追加

文字列ACTION_DIAL

アクティビティアクション:データで指定された番号をダイヤルします。これは、UI ダイヤルされている番号を使用を示し、ユーザーが明示的に通話を開始できるようにします。

入力:何もない場合は、空のダイヤラが開始されます。それ以外の場合、getData()は、ダイヤルする電話番号のURI、またはtel:URI明示的な電話番号。

出力:なし。

定数値:_Android.intent.action.DIAL_


_ACTION_CALL_

APIレベル1で追加

文字列ACTION_CALL

アクティビティアクション呼び出しを実行データで指定された人に。

入力:何もない場合、空のダイヤラが開始されます。 else getData()は、ダイヤルする電話番号のURIまたはtel:明示的な電話番号のURIです。

出力:なし。

  • どのアプリケーションが通話を開始できるかには制限があります。ほとんどのアプリケーションは_ACTION_DIAL_を使用する必要があります。
  • このインテントを使用して緊急電話番号を呼び出すことはできません。アプリケーションは、_ACTION_DIAL_を使用して緊急番号をダイヤルできます。
  • アプリがAndroid M以上を対象とし、_CALL_PHONE_権限を使用していると宣言した場合not付与されている場合、このアクションを使用しようとすると、 SecurityException

定数値:_Android.intent.action.CALL_


だから基本的に

ダイヤラアプリを開くには(ユーザーはダイヤラアプリ内の通話ボタンを押す必要があります。追加の権限は必要ありません)、次を使用します。

_String number = "7777777777";
Uri call = Uri.parse("tel:" + number);             
Intent surf = new Intent(Intent.ACTION_DIAL, call); 
startActivity(surf);
_

ダイヤラアプリを開いて自動的に通話を行うには(_Android.permission.CALL_PHONE_が必要)、次を使用します。

_String number = "7777777777";
Uri call = Uri.parse("tel:" + number);             
Intent surf = new Intent(Intent.ACTION_CALL, call); 
startActivity(surf); 
_
11
Charuක

特別なシステム権限を持つシステムアプリケーションでない限り、実際に番号に直接電話をかけることはできません。これには、OEMによってプレインストールされるか、システムアプリとしてルート化されてインストールされる必要があります。使用する必要のあるインテントはAndroid.intent.action.CALL_PRIVILEGEDであり、権限はAndroid.permission.CALL_PRIVILEGEDです。

ACTION_CALLとACTION_DIALの違いは、ダイヤラを上げた状態でダイヤルが起動することです。

2
Gabe Sechan