2016-12-18 6 views
4

私のアンドロイドアプリからテスト目的で定期的に電話をかけたい/プログラムから受け取って、自分のネットワークから統計情報を収集したい。だから私のアプリは毎回頻繁に電話をかけ、電話に出ると数秒後に電話が終了します。ここから始めるには、私が理解できるコードがあります。それはダイヤルし、私が画面に触れることなく私が指定した番号の呼び出しです。 DIALボタンを押さなくて、私が提供した番号に電話をかけなければならない私の理解のACTION_CALL 1として プログラムでアンドロイドで電話をかける方法

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_DIALのように動作しています。これは画面に数字を表示し、ユーザーはダイヤルボタンを押して電話をかける必要があります。では、ACTION_DIALとACTION_CALLに違いはありませんか?

私は6.0以降の許可があることを理解して記事のいくつかを読んだ後、私が使用している場合

私の質問はロリポップ(ある(私は上記の私のコードで使用している)のコールをダイヤルし、ユーザーから要求される必要があります5.0)OSでは、ダイヤルせずに電話をかけることができますか?

答えて

8

ACTION_DIAL

APIレベルで追加された1

文字列ACTION_DIAL

活動のアクション:データで指定された番号をダイヤルします。これは番号をダイヤル番号で表示し、ユーザーはに明示的にを呼び出すことができます。

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

出力:何もありません。

定数値:APIレベルでandroid.intent.action.DIAL


ACTION_CALL

追加1

文字列ACTION_CALL

アクティビティアクションデータで指定された人にコールを実行します。

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

出力:何もありません。

  • アプリケーションが通話を開始することができた上での制約があります。ほとんどのアプリケーションはACTION_DIALを使用する必要があります。
  • このインテントは、の緊急番号に電話をかけることはできません。アプリケーションはACTION_DIALを使用して緊急番号にダイヤルできます。
  • もしあなたのアプリターゲットアンドロイドM以上、その後、許可されないあるCALL_PHONE 許可を使用して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); 
+0

ありがとうございます。それは素晴らしい作品です!これをAsyncTaskとして設定することができますか? –

+1

AsyncTaskは、あなたが意味していたことを明確にしていませんが、AsyncTaskは、スレッドなどのより複雑なメソッドを扱うことなく、Androidで並列処理を実装する最も簡単な方法の1つです。あなたはUIスレッドでそれ以外の場合は、バックグラウンドスレッドでいくつかのプロセスの後にダイヤルしたい場合は、.use onPostExecuteをクラッシュします。 –

1

特殊なシステム権限を持つシステムアプリケーションでない限り、実際には直接番号を呼び出すことはできません。これは、OEMによって事前にインストールされているか、システムアプリとしてルートされインストールされている必要があります。使用する必要があるのはandroid.intent.action.CALL_PRIVILEGEDです。許可はandroid.permission.CALL_PRIVILEGEDです。

ACTION_CALLとACTION_DIALの違いは、ダイヤルをダイヤルアップで起動することです。

関連する問題