프로그래밍 방식으로 전화를 거는 방법은 무엇입니까?


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와 호환되지 않을 수 있나요?


PLS 로그 캣 O / P 붙여 넣기 또는 UR 오류 세부 정교한
chikka.anddev

답변:


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 장치에 듀얼 SIM이있는 경우 어떻게 할 수 있습니까? 특정 심을 통해 전화를 걸 수 있습니까?
Dinash

3
@Dinash이 이미 대답 질문을 살펴보십시오 : stackoverflow.com/questions/13231962/call-from-second-sim
리 오르

동일한 코드를 사용했지만 Galaxy S7 edge에서 작동하지 않습니다. 이것은 내 코드입니다 Intent intentCall = new Intent (Intent.ACTION_CALL); 문자열 uri = "tel :"+ number.trim (); intentCall.setData (Uri.parse (uri)); if (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 2015.04.21

@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 2015

@TeraiyaMayur, IVRS 호출 시스템에 따라 다릅니다. 멸종 지원을 부르기 때문에 저를위한 일은 조기 대응을 필요로합니다.
Dwivedi Ji

예, 맞습니다. 또한 적절한 유효한 IVR 번호를 얻었으며 제대로 작동합니다. 감사합니다
Teraiya Mayur 2015-04-27

7

선택한 답변에는 마시멜로 권한 확인이 없습니다. marshmallow 6.0 이상 장치에서는 직접 작동하지 않습니다.

내가 너무 늦었다는 것을 알고 있지만이 질문은 투표가 많기 때문에 앞으로 다른 사람들에게 도움이 될 것이라고 생각했습니다.

마시멜로 장치에서는 호출을 위해 런타임 권한을 가져와야합니다.

다음은 마시멜로 이상에서 호출하는 예입니다.

Android 마시멜로 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
@Astor 나는 그것을 매우 명확하게 정의했습니다. 나는 이미 이것을 통해 포인트를 얻었습니다. 즉, 내 대답은 어떤 사람들에게는 다른 것보다 더 나은 것입니다.
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.