จะโทรออกโดยใช้โปรแกรมได้อย่างไร?


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?


กรุณาวาง logcat o / p หรือ
กรอก

คำตอบ:


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 ฉันจะทำอย่างไรในกรณีที่อุปกรณ์นั้นมีสองซิม สามารถโทรผ่านซิมใดเครื่องหนึ่งได้หรือไม่?
Dinash

3
@Dinash: ดูคำถามที่ตอบแล้วนี้: stackoverflow.com/questions/13231962/call-from-second-sim
Lior

ฉันใช้รหัสเดียวกัน แต่ใช้ไม่ได้กับ Galaxy S7 edge นี่คือรหัสของฉัน Intent IntentCall = เจตนาใหม่ (Intent.ACTION_CALL); สตริง uri = "tel:" + number.trim (); intentCall.setData (Uri.parse (URI)); ถ้า (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (IntentCall); }
AngelJanniee

เครื่องจำลองนี้สามารถใช้โทรโดยไม่มีอุปกรณ์จริงได้หรือไม่
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

@TeraiyaMayur คุณสามารถลบอักขระที่ไม่ใช่ตัวเลขออกก่อนได้ ดังนั้นหากคุณมีหมายเลขโทรศัพท์เป็นString number = "1689,,3,2,1,1ทำnubmer = "tel:" + number.replaceAll("[^0-9]", "");
Walk

@ 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

ใช่คุณพูดถูกฉันยังได้รับหมายเลข IVR ที่ถูกต้องและใช้งานได้ดี ขอบคุณ
Teraiya Mayur

7

ในคำตอบที่เลือกไม่มีการตรวจสอบการอนุญาตมาร์ชเมลโล่ มันจะไม่ทำงานโดยตรงในอุปกรณ์ marshmallow 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
@ ฉันได้กำหนดไว้อย่างชัดเจนฉันได้รับคะแนนผ่านสิ่งนี้แล้วซึ่งหมายความว่าคำตอบของฉันคือบางสิ่งที่ดีกว่าคำอื่นสำหรับบางคน
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)

แต่จะแสดงอีกหนึ่งกล่องโต้ตอบ (ถามว่าคุณต้องการโทรหาโทรศัพท์เพียงครั้งเดียวหรือทุกครั้ง) ดังนั้นจะดีกว่าถ้าใช้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

หากใครกำลังมองหาใน Kotlin

    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.