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を使用している場合、ダイヤルせずに電話をかけることができるかどうかです。
_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
_を使用して緊急番号をダイヤルできます。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);
_
特別なシステム権限を持つシステムアプリケーションでない限り、実際に番号に直接電話をかけることはできません。これには、OEMによってプレインストールされるか、システムアプリとしてルート化されてインストールされる必要があります。使用する必要のあるインテントはAndroid.intent.action.CALL_PRIVILEGEDであり、権限はAndroid.permission.CALL_PRIVILEGEDです。
ACTION_CALLとACTION_DIALの違いは、ダイヤラを上げた状態でダイヤルが起動することです。