ฉันจะให้ตัวหมุนเพื่อเปิดโดยแสดงหมายเลขโทรศัพท์ได้อย่างไร


193

ฉันไม่จำเป็นต้องโทรไปที่หมายเลขโทรศัพท์ฉันแค่ต้องการให้ผู้โทรเข้าเปิดขึ้นมาพร้อมกับหมายเลขโทรศัพท์ที่แสดงอยู่แล้ว Intentฉันควรใช้อะไรเพื่อให้บรรลุสิ่งนี้

คำตอบ:


532

สองวิธีในการบรรลุเป้าหมาย

1) ต้องเริ่มการหมุนหมายเลขผ่านรหัสโดยไม่ต้องมีการโต้ตอบกับผู้ใช้

คุณต้องAction_Dial,

ใช้รหัสด้านล่างมันจะเปิด Dialer ด้วยหมายเลขที่ระบุ

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

ต้องการคำนำหน้า 'tel:'นอกจากนี้จะมีการโยนข้อยกเว้นต่อไปนี้: java.lang.IllegalStateException: ไม่สามารถเรียกใช้วิธีการของกิจกรรมได้

Action_Dial ไม่ต้องการการอนุญาตใด ๆ

หากคุณต้องการที่จะเริ่มต้นการโทรโดยตรงโดยไม่ต้องโต้ตอบกับผู้ใช้ของIntent.ACTION_CALLคุณสามารถใช้การดำเนินการ ในกรณีนี้คุณต้องเพิ่มการอนุญาตต่อไปนี้ใน AndroidManifest.xml ของคุณ:

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

2) ต้องการให้ผู้ใช้คลิกที่สตริง Phone_Number และเริ่มการโทร

android:autoLink="phone" 

คุณต้องใช้ TextView ด้วยคุณสมบัติด้านล่าง

android: autoLink = "โทรศัพท์" android: linksClickable = "true" คุณสมบัติ textView

คุณไม่จำเป็นต้องใช้ความตั้งใจหรือได้รับอนุญาตผ่านวิธีนี้


9
นั่นเป็นสิ่งที่ดีและมันแตกต่างจาก Intent.ACTION_CALL โดยที่มันจะไม่โทรทันที
Amt87

ACTION_DIAL ต้องการการอนุญาตหรือไม่เท่านั้น ACCESS_CALL
Marc Plano-Lesay

1
ใช้งานได้กับหมายเลขโทรศัพท์จากเดนมาร์กเช่นกัน :) คุณไม่จำเป็นต้องเพิ่ม +45 ก่อนถึงหมายเลข มันทำงานได้ดีเพียงแค่แยกหมายเลขโทรศัพท์
ymerdrengene

1
ฉันมีปัญหากับปุ่มย้อนกลับหลังจากเปิดตัวเรียกเลขหมายด้วยเจตนาใหม่ ฉันสามารถกลับไปที่แอปพลิเคชันของฉันได้เพียงกดปุ่มย้อนกลับ 3 ครั้ง (แสดงให้ฉันเห็นหลายหน้าจอของตัวหมุนหมายเลขที่ฉันไม่ได้เปิด - ตัวหมุนหมายเลขตัวเองสร้างหน้าจอการติดต่อใหม่รายการโปรด) มีใครรู้วิธีกลับไปที่แอพด้วยการกดปุ่มย้อนกลับเพียงครั้งเดียวหรือไม่?
kashlo

2
2012 ... วันเก่าดี มันถูกต้องทางการเมืองในปี 2018 บริษัท ใหญ่ขายข้อมูลผู้ใช้และแอพของเราจำเป็นต้องจัดการกับระบบราชการ Android เพียงเพื่อไม่รองรับ SMS และโทรศัพท์
Josh

52

แต่ถ้าคุณมีTextViewหมายเลขโทรศัพท์ที่แสดงอยู่คุณก็ไม่จำเป็นต้องจัดการกับ intents เลยคุณสามารถใช้แอตทริบิวต์ XML android:autoLink="phone"และระบบปฏิบัติการจะเริ่มต้นการACTION_DIALแสดงเจตนาโดยอัตโนมัติ


วิธีการที่รวดเร็วมาก!
Taslim Oseni

7

ตกลงมันจะเป็นคำตอบที่ช้ามากสำหรับคำถามนี้ แต่นี่เป็นเพียงหนึ่งตัวอย่างถ้าคุณต้องการที่จะทำมันในKotlin

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

คิดว่าอาจช่วยใครซักคน


2

@ashishduh ที่กล่าวถึงข้างต้นการใช้งานandroid:autoLink="phoneก็เป็นวิธีที่ดีเช่นกัน แต่ตัวเลือกนี้มาพร้อมกับข้อเสียเปรียบอย่างใดอย่างหนึ่งมันไม่สามารถใช้ได้กับความยาวหมายเลขโทรศัพท์ทั้งหมด ตัวอย่างเช่นหมายเลขโทรศัพท์ 11 หมายเลขจะใช้ไม่ได้กับตัวเลือกนี้ วิธีแก้ปัญหาคือนำหน้าหมายเลขโทรศัพท์ของคุณด้วยรหัสประเทศ

ตัวอย่าง:

08034448845 จะไม่ทำงาน

แต่+2348034448845จะ


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

นี่คือวิธีที่คุณสามารถเปิดหมายเลขกำหนดป้ายกำกับ EditText บนตัวหมุนหมายเลขโดยตรง


1

เพิ่มสิทธิ์ในรายการ:

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

สร้างปุ่มหรือตัวอย่างวิดเจ็ต: 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);

    }
});

คำตอบนี้ถูกต้อง แต่คำตอบนี้ไม่ตรงกับคำถาม
ดวงจันทร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.