Làm thế nào để gọi điện thoại theo chương trình?


123

Tôi đang chuyển cho một hoạt động số để gọi theo một nhóm

và sau đó, trong hoạt động như vậy, tôi có một nút để gọi đến số đó, đây là mã:

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

Có gì đó không ổn, vì khi tôi nhấn nút thì không có gì xảy ra ...

Tôi đang làm gì sai?

PD: Tôi đang sử dụng dự án tương thích Android 1.5 ... có lẽ cuộc gọi điện thoại không tương thích với 1.5?


pls dán logcat o / p hoặc xây dựng chi tiết lỗi ur
chikka.anddev

Câu trả lời:


259

Bạn đã quên gọi startActivity. Nó sẽ giống như thế này:

Intent intent = new Intent(Intent.ACTION_CALL);

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

Một ý định tự nó chỉ đơn giản là một đối tượng mô tả một cái gì đó. Nó không làm gì cả.

Đừng quên thêm quyền có liên quan vào tệp kê khai của bạn:

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

Xin chào @Lior, tôi có thể làm gì trong trường hợp thiết bị đó có hai sim. Có thể thực hiện cuộc gọi thông qua một sim cụ thể không?
Dinash

3
@Dinash: Hãy xem câu hỏi đã được trả lời này: stackoverflow.com/questions/13231962/call-from-second-sim
Lior

Tôi đã sử dụng cùng một mã nhưng không hoạt động trên Galaxy S7 edge. Đây là mã của tôi Intent Ý định = 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 (PurposeCall); }
AngelJanniee

Mô phỏng này có thể được sử dụng để thực hiện cuộc gọi mà không cần thiết bị vật lý
user3754136

24

Đã thử điều này trên điện thoại của tôi và nó hoạt động hoàn hảo.

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

Thêm quyền này trong tệp kê khai.

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

1
số giống như 1689, 3,2,1,1. Tôi đang gặp sự cố, nó sẽ chỉ là 1689. Vui lòng giúp tôi nếu bạn có bất kỳ giải pháp nào cho vấn đề tương tự.
Teraiya Mayur

@TeraiyaMayur, trước tiên bạn có thể xóa mọi ký tự không phải số. Vì vậy, nếu bạn có số điện thoại như String number = "1689,,3,2,1,1làmnubmer = "tel:" + number.replaceAll("[^0-9]", "");
Walk

@Walk, một vấn đề là chúng tôi muốn gọi bằng các ký hiệu đặc biệt như ,*. Chúng phải nằm trong số các chữ số. Trên một trình giả lập, nó hoạt động bình thường, nhưng trên một thiết bị, nó giảm các ký hiệu và chữ số bổ sung.
CoolMind

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

cho nhiều cuộc gọi được đặt hàng

Điều này được sử dụng cho các hệ thống gọi DTMF. Nếu cuộc gọi bị ngắt sau đó, bạn nên chuyển thêm "," giữa các số.


Dwivedi Ji: số giống như 1689, 3,2,1,1. Tôi đang gặp sự cố, nó sẽ chỉ là 1689. Vui lòng giúp tôi nếu bạn có bất kỳ giải pháp nào cho vấn đề tương tự.
Teraiya Mayur

@TeraiyaMayur, Nó phụ thuộc vào hệ thống cuộc gọi IVRS. Công việc của nó đối với tôi vì sự hỗ trợ về sự tuyệt chủng đang kêu gọi của tôi nên có phản ứng sớm.
Dwivedi Ji

Vâng, bạn nói đúng, tôi cũng nhận được số IVR hợp lệ thích hợp và nó hoạt động tốt. cảm ơn
Teraiya Mayur

7

Trong câu trả lời đã chọn, không có kiểm tra sự cho phép của marshmallow. Nó sẽ không hoạt động trực tiếp trong thiết bị marshmallow 6.0 trở lên.

Tôi biết mình đã quá muộn nhưng câu hỏi này có lượng bình chọn lớn nên tôi nghĩ nó sẽ giúp ích cho những người khác trong tương lai.

Trong các thiết bị marshmallow, chúng tôi cần có quyền thời gian chạy cho cuộc gọi ...

Đây là ví dụ để thực hiện cuộc gọi bằng marshmallow trở lên.

Cách gọi điện trong android marshmallow 6.0 trở lên



2

Ở đây tôi sẽ chỉ cho bạn cách bạn có thể gọi điện từ hoạt động của mình. Để thực hiện cuộc gọi, bạn phải đặt mã này trong ứng dụng của mình.

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 tôi đã xác định nó rất rõ ràng, tôi đã nhận được điểm thông qua điều này, điều này có nghĩa là câu trả lời của tôi tốt hơn câu trả lời kia đối với một số người.
Pir Fahim Shah

2

Điều này không yêu cầu sự cho phép.

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

Hoặc là

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

Nhưng nó lại hiển thị một hộp thoại nữa (hỏi bạn muốn gọi điện thoại chỉ một lần hay luôn). Vì vậy, sẽ tốt hơn nếu sử dụng ACTION_CALLvới một quyền (xem Quyền đã thu hồi 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

Nếu ai đang tìm kiếm ở Kotlin

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

Giống như một số giải pháp khác, nó yêu cầu sự android.permission.CALL_PHONEcho phép.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.