プログラムで電話をかける方法は?


123

バンドルに呼び出す番号をアクティビティに渡します

そして、そのような活動で、私はその番号に電話するボタンを持っています、これはコードです:

callButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(bundle.getString("mobilePhone")));
            }
        }); 

ボタンを押しても何も起こらないので、何かがおかしいです...

何が悪いのですか?

PD:Android 1.5互換プロジェクトを使用しています...電話が1.5と互換性がないのでしょうか?


plsがlogcat o / pを貼り付けるか、詳細なurエラーの詳細
chikka.anddev

回答:


259

startActivityを呼び出すのを忘れました。次のようになります。

Intent intent = new Intent(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:" + bundle.getString("mobilePhone")));
context.startActivity(intent);

インテント自体は、単に何かを説明するオブジェクトです。何もしません。

マニフェストに関連する権限を追加することを忘れないでください:

<uses-permission android:name="android.permission.CALL_PHONE" />

こんにちは@Liorそのデバイスにデュアルsimがある場合、どうすればよいですか?特定のシムを通して電話をかけることは可能ですか?
Dinash 2013

3
@Dinash:既に回答済みのこの質問をご覧ください:stackoverflow.com/questions/13231962/call-from-second-sim
Lior

同じコードを使用しましたが、Galaxy S7エッジでは機能しません。これは私のコードですIntent intentCall = new Intent(Intent.ACTION_CALL); 文字列uri = "tel:" + number.trim(); intentCall.setData(Uri.parse(uri)); if(ActivityCompat.checkSelfPermission(getApplicationContext()、Manifest.permission.CALL_PHONE)== PackageManager.PERMISSION_GRANTED){startActivity(intentCall); }
AngelJanniee 2016

このシミュレータは、物理デバイスなしで呼び出しを行うために使用することができます
user3754136

24

私の電話でこれを試してみましたが、完全に機能します。

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:900..." ));
startActivity(intent);

この権限をマニフェストファイルに追加します。

<uses-permission android:name="android.permission.CALL_PHONE" />

1
数値は1689、、3,2,1,1のようになります。私はそれが1689だけになる問題を取得しています。同じための解決策がある場合は私を助けてください。
Teraiya Mayur 2015

@TeraiyaMayurでは、最初に数字以外の文字を削除できます。したがって、電話番号がある場合は、String number = "1689,,3,2,1,1nubmer = "tel:" + number.replaceAll("[^0-9]", "");
ウォーク

@Walk、問題はのような特別なシンボルで呼び出したいということです,*。それらは数字の中になければなりません。エミュレータでは正しく機能しますが、デバイスでは追加の記号と数字が表示されます。
CoolMind

13
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

複数の注文された通話の場合

これは、DTMF呼び出しシステムに使用されます。コールがドロップの場合は、番号の間にさらに「」を渡す必要があります。


Dwivedi Ji:数は1689、、3,2,1,1のようになります。私はそれが1689だけになる問題を取得しています。同じための解決策がある場合は私を助けてください。
Teraiya Mayur

@ TeraiyaMayur、IVRS通話システムに依存します。私の呼びかけの絶滅のサポートのために私のためにその仕事は早い反応をとります。
Dwivedi Ji 2015

はい、そうです。私は適切な有効なIVR番号も取得し、正常に機能します。感謝
Teraiya Mayur

6

選択した回答では、マシュマロ許可のチェックはありません。マシュマロ6.0以降のデバイスでは直接機能しません。

私は手遅れだと知っていますが、この質問には大きな投票があるので、将来的に他の人に役立つと思いました。

マシュマロデバイスでは、呼び出し時にランタイム許可を取得する必要があります...

マシュマロ以上での呼び出し例です。

Android Marshmallow 6.0以降で電話をかける方法



2

ここでは、アクティビティから電話をかける方法を紹介します。電話をかけるには、このコードをアプリに置く必要があります。

try {
    Intent my_callIntent = new Intent(Intent.ACTION_CALL);
    my_callIntent.setData(Uri.parse("tel:"+phn_no));
    //here the word 'tel' is important for making a call...
    startActivity(my_callIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(getApplicationContext(), "Error in your phone call"+e.getMessage(), Toast.LENGTH_LONG).show();
}

1
@Astor私はそれを非常に明確に定義しました、私はこれによってすでにポイントを獲得しています。
Pir Fahim Shah

2

これは許可を必要としません。

val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+123456"))
startActivity(intent)

または

val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", "+123456", null))
startActivity(intent)

しかし、もう1つのダイアログが表示されます(電話を1回だけ呼び出すか、常に呼び出すかを尋ねます)。そのためACTION_CALL、権限とともに使用することをお勧めします(取り消された権限android.permission.CALL_PHONEを参照)。


0
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
   final Button button = (Button) findViewById(R.id.btn_call);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String mobileNo = "123456789";
            String uri = "tel:" + mobileNo.trim();
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(uri));
            startActivity(intent);
        }
    });*
 }

0

誰かがコトリンで探しているなら

    val  uri = "tel:+800******"
    val call_customer_service = Intent(Intent.ACTION_CALL)
    call_customer_service.setData(Uri.parse(uri))
    startActivity(call_customer_service)

他のいくつかのソリューションと同様に、android.permission.CALL_PHONE許可が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.