Bagaimana cara membuat panggilan telepon secara terprogram?

123

Saya meneruskan ke suatu aktivitas nomor yang harus dihubungi oleh sebuah kelompok

dan kemudian, dalam aktivitas seperti itu, saya memiliki tombol untuk menelepon ke nomor itu, ini kodenya:

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

Ada yang salah, karena ketika saya menekan tombol tidak ada yang terjadi ...

Apa yang saya lakukan salah?

PD: Saya menggunakan proyek yang kompatibel dengan Android 1.5 ... mungkin panggilan telepon tidak kompatibel dengan 1.5?

NullPointerException
sumber
tolong tempel logcat o / p atau
uraikan

Jawaban:

259

Anda lupa memanggil startActivity. Ini akan terlihat seperti ini:

Intent intent = new Intent(Intent.ACTION_CALL);

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

Maksud itu sendiri hanyalah sebuah objek yang mendeskripsikan sesuatu. Itu tidak melakukan apapun.

Jangan lupa untuk menambahkan izin yang relevan ke manifes Anda:

<uses-permission android:name="android.permission.CALL_PHONE" />
Lior
sumber
Hai @Lior bagaimana saya bisa melakukannya jika perangkat memiliki dual-sim. Apakah mungkin melakukan panggilan melalui sim tertentu?
Dinash
3
@Dinash: Lihatlah pertanyaan yang sudah dijawab ini: stackoverflow.com/questions/13231962/call-from-second-sim
Lior
Saya telah menggunakan kode yang sama tetapi tidak berfungsi di tepi Galaxy S7. Ini adalah kode saya Intent intentCall = new Intent (Intent.ACTION_CALL); String uri = "tel:" + number.trim (); intentCall.setData (Uri.parse (uri)); if (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (intentCall); }
AngelJanniee
Dapatkah simulator ini digunakan untuk melakukan panggilan tanpa perangkat fisik
pengguna3754136
24

Sudah mencoba ini di ponsel saya dan berfungsi dengan sempurna.

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

Tambahkan izin ini dalam file manifes.

<uses-permission android:name="android.permission.CALL_PHONE" />
Anirudh
sumber
1
jumlahnya seperti 1689,, 3,2,1,1. Saya mendapatkan masalah itu hanya 1689..Tolong bantu saya jika Anda memiliki solusi untuk hal yang sama.
Teraiya Mayur
@TeraiyaMayur Anda dapat menghapus karakter non-numerik terlebih dahulu. Jadi, jika Anda memiliki nomor telepon seperti String number = "1689,,3,2,1,1biasanubmer = "tel:" + number.replaceAll("[^0-9]", "");
Jalan kaki
@Walk, masalahnya adalah kami ingin memanggil dengan simbol khusus seperti ,*. Mereka harus berada di antara angka. Pada emulator, ini berfungsi dengan benar, tetapi pada perangkat itu menjatuhkan simbol dan angka tambahan.
CoolMind
13
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

untuk beberapa panggilan yang dipesan

Ini digunakan untuk sistem panggilan DTMF. Jika panggilan terputus, Anda harus meneruskan lebih banyak "," di antara nomor.

Dwivedi Ji
sumber
Dwivedi Ji: angka seperti 1689, 3,2,1,1. Saya mendapatkan masalah itu hanya 1689..Tolong bantu saya jika Anda memiliki solusi untuk hal yang sama.
Teraiya Mayur
@TeraiyaMayur, Itu tergantung pada sistem panggilan IVRS. Ini bekerja untuk saya karena saya memanggil dukungan kepunahan mengambil respon awal.
Dwivedi Ji
Ya, Anda benar, saya juga mendapatkan nomor IVR valid yang tepat dan berfungsi dengan baik. terima kasih
Teraiya Mayur
7

Dalam jawaban yang dipilih, tidak ada pemeriksaan izin marshmallow. Ini tidak akan bekerja secara langsung di perangkat marshmallow 6.0 atau lebih tinggi.

Saya tahu saya terlambat tetapi pertanyaan ini memiliki suara yang besar jadi saya pikir ini akan membantu orang lain di masa depan.

Di perangkat marshmallow kita perlu mengambil izin waktu proses untuk panggilan ...

Berikut adalah contoh melakukan panggilan di marshmallow atau di atasnya.

Cara melakukan panggilan di android marshmallow 6.0 atau lebih tinggi

Vishal Chhodwani
sumber
2

Di sini saya akan menunjukkan kepada Anda bagaimana Anda dapat melakukan panggilan telepon dari aktivitas Anda. Untuk melakukan panggilan, Anda harus meletakkan kode ini di aplikasi Anda.

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();
}
Pir Fahim Shah
sumber
1
@Astor saya telah mendefinisikannya dengan sangat jelas, dan saya sudah mendapatkan poin melalui ini, yang berarti bahwa jawaban saya adalah beberapa yang lebih baik daripada yang lain untuk sebagian orang.
Pir Fahim Shah
2

Ini tidak membutuhkan izin.

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

Atau

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

Tapi itu menunjukkan satu dialog lagi (menanyakan apakah Anda ingin menelepon telepon hanya sekali atau selalu). Jadi akan lebih baik menggunakan ACTION_CALLdengan izin (lihat Izin yang dicabut android.permission.CALL_PHONE ).

CoolMind
sumber
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);
        }
    });*
 }
Muhammad Usman Ghani
sumber
0

Jika ada yang mencari di Kotlin

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

Seperti beberapa solusi lain, ini membutuhkan android.permission.CALL_PHONEizin.

mughil
sumber