Làm cách nào để mở trình quay số với số điện thoại được hiển thị?


193

Tôi không cần gọi số điện thoại, tôi chỉ cần trình quay số mở với số điện thoại đã được hiển thị. Tôi Intentnên sử dụng những gì để đạt được điều này?

Câu trả lời:


531

Hai cách để đạt được nó.

1) Cần khởi động trình quay số qua mã, không có sự tương tác của người dùng.

Bạn cần Action_Dial,

sử dụng mã bên dưới, nó sẽ mở Trình quay số với số được chỉ định

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent); 

Tiền tố 'tel:' là bắt buộc , ngoại trừ trường hợp ngoại lệ sau sẽ bị ném: java.lang.IllegalStateException: Không thể thực thi phương thức của hoạt động.

Action_Dial không yêu cầu bất kỳ sự cho phép.

Nếu bạn muốn bắt đầu cuộc gọi trực tiếp mà không cần tương tác của người dùng , Bạn có thể sử dụng hành động Intent.ACTION_CALL. Trong trường hợp này, bạn phải thêm quyền sau trong AndroidManifest.xml của mình:

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

2) Cần người dùng nhấp vào chuỗi Phone_Number và bắt đầu cuộc gọi.

android:autoLink="phone" 

Bạn cần sử dụng TextView với thuộc tính bên dưới.

android: autoLink = "phone" android: linksClickable = "true" một thuộc tính textView

Bạn không cần phải sử dụng ý định hoặc để có được sự cho phép thông qua cách này.


9
Điều đó thật tuyệt và nó khác với Intent.ACTION_CALL bởi nó không gọi ngay lập tức
Amt87

ACTION_DIAL có yêu cầu sự cho phép hay chỉ ACCESS_CALL không?
Marc Plano-Lesay

1
Điều này cũng hoạt động với số điện thoại từ Đan Mạch :) Bạn không cần thêm +45 trước số. Nó hoạt động tốt chỉ cần phân tích số điện thoại
ymerdrengene

1
Ive có vấn đề với nút quay lại sau khi mở trình quay số trong ý định mới. Tôi chỉ có thể quay lại ứng dụng của mình chỉ bằng 3 lần nhấn nút quay lại (nó hiển thị cho tôi một số màn hình trình quay số mà tôi không mở - chính trình quay số, tạo màn hình liên lạc mới, mục yêu thích). Có ai biết làm thế nào để quay lại ứng dụng chỉ với 1 lần nhấn nút quay lại không?
kashlo

2
2012 ... Ngày xưa tốt đẹp. Đó là chính xác năm 2018, các công ty lớn bán dữ liệu người dùng và các ứng dụng của chúng tôi cần phải đối phó với sự quan liêu của Android chỉ để KHÔNG hỗ trợ các cuộc gọi SMS và Điện thoại.
Josh

52

Câu trả lời khá muộn, nhưng nếu bạn có TextViewsố điện thoại đang hiển thị, thì bạn không cần phải xử lý ý định nào cả, bạn chỉ cần sử dụng thuộc tính XML android:autoLink="phone"và HĐH sẽ tự động khởi tạo ACTION_DIALÝ định.


Cách tiếp cận rất nhanh!
Taslim Oseni

7

Được rồi, nó sẽ là câu trả lời cực kỳ muộn cho câu hỏi này. Nhưng đây chỉ là một mẫu nếu bạn muốn làm điều đó trong Kotlin .

val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:<number>")
startActivity(intent)

Nghĩ rằng nó có thể giúp ai đó.


2

Như @ashishduh đã đề cập ở trên, sử dụng android:autoLink="phonecũng là một giải pháp tốt. Nhưng tùy chọn này đi kèm với một nhược điểm, nó không hoạt động với tất cả độ dài số điện thoại. Chẳng hạn, số điện thoại gồm 11 số sẽ không hoạt động với tùy chọn này. Giải pháp là tiền tố số điện thoại của bạn với mã quốc gia.

Thí dụ:

08034448845 sẽ không làm việc

nhưng +2348034448845sẽ


1
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

Đây là cách bạn có thể mở nhãn EditText được gán số trực tiếp trên trình quay số.


1

Thêm quyền trong tệp kê khai:

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

Tạo nút hoặc bất kỳ ví dụ widget nào: btnCall

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent callIntent = new Intent(Intent.ACTION_DIAL);
        callIntent.setData(Uri.parse("tel: +98990*******");
        startActivity(callIntent);

    }
});

Câu trả lời này đúng nhưng câu trả lời này không phù hợp với câu hỏi.
trăng
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.