make a phone call click on a button
Asked Answered
C

14

55

I'm trying to make a call when I press a button in android

((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    String phno="10digits";

    Intent i=new Intent(Intent.ACTION_DIAL,Uri.parse(phno));
    startActivity(i);
  }
});

But when I run and click on the button it gives me the error

ERROR/AndroidRuntime(1021): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=9392438004 }

How can I resolve this problem?

Cobbett answered 23/3, 2011 at 9:46 Comment(1)
Do you try this on emulator? Try on the real phone. Emulator may miss the caller activity.Anteversion
E
147

Have you given the permission in the manifest file

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

and inside your activity

  Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:123456789"));
    startActivity(callIntent);

Let me know if you find any issue.

Ellita answered 23/3, 2011 at 11:6 Comment(5)
There is absolutely no issues at all. Wow!!! I am just learning to write apps for Android now and this question was asked back in 2011. Thank you for this short and sweet answer.Cater
You should not use Intent.ACTION_CALL unless you are writing a dialer app. Instead you should use Intent.ACTION_DIAL which prepopulates the dialer with the number you pass it. The proper fix for the problem is to just prepend "tel:" in front of the 10 digits number you want to call.Cathleencathlene
10 digits? so you can't call a mobile with international prefix, like +491702112334? because this is 13 digitsDemb
I know this is old but im doing stuff for old hardware. Im getting the "No Activity Found" exception on the android 2,1 (api 7) platform. Is there a way to dial from this platform?Mord
No need to add permission when using ACTION_DIALAchernar
B
16

There are two intents to call/start calling: ACTION_CALL and ACTION_DIAL.

ACTION_DIAL will only open the dialer with the number filled in, but allows the user to actually call or reject the call. ACTION_CALL will immediately call the number and requires an extra permission.

So make sure you have the permission

uses-permission android:name="android.permission.CALL_PHONE"

in your AndroidManifest.xml

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dbm.pkg"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- NOTE! Your uses-permission must be outside the "application" tag
               but within the "manifest" tag. -->

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

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">

        <!-- Insert your other stuff here -->

    </application>

    <uses-sdk android:minSdkVersion="9" />
</manifest> 
Bismuth answered 9/4, 2014 at 6:29 Comment(2)
hi,i have a question regarding this answer.If i have to make call to an international phone number,then where should i mention the country code?Palaeozoology
I don't have access to this code anymore. Sorry but it may help #13133224Bismuth
C
13

None of the above worked so with a bit of tinkering here's code that did for me

        Intent i = new Intent(Intent.ACTION_DIAL);
        String p = "tel:" + getString(R.string.phone_number);
        i.setData(Uri.parse(p));
        startActivity(i);
Chancellorship answered 6/11, 2011 at 16:2 Comment(0)
U
12

change your String to String phno="tel:10digits"; and try again.

Unite answered 23/3, 2011 at 10:21 Comment(5)
thanks Harshad but i can't get any key pad it can directly call to that number without user modification of that numberCobbett
You want to call directly without showing dial pad??? if so then use Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(phno));Unite
Calling directly as above will not work unless and untill you add this line as child of your manifest in manifest file <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>Unite
did this think worked? You can accept the answer and help others if it is correct..Unite
how directly make a video call to particular phone no provided in tel:10digit no,duo video call from android pleae help me.Rehearing
F
8

I was having a hell of a time with this as well. I didn't realize that beyond the extra permission you need to append "tel:" onto the string that has the number in it. This is what mine looks like after getting it functional. Hope this helps.

@Override
public void onClick(View v) {
  Intent intent = new Intent(Intent.ACTION_DIAL);
  String temp = "tel:" + phone;
  intent.setData(Uri.parse(temp));

  startActivity(intent);
}
Finstad answered 2/6, 2016 at 1:18 Comment(1)
Helpful @Finstad , mostly users don't allow permissions and this will help in that scenario.Quadrireme
L
5

check permissions before (for android 6 and above):

if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) ==
                            PackageManager.PERMISSION_GRANTED) 
   {

     context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:09130000000")));
   }
Lichenology answered 26/1, 2016 at 8:45 Comment(0)
N
4

add "tel:" along with your number to be dialed in your intent and then start your activity.

Intent myIntent = new Intent(Intent.ACTION_CALL);
 String phNum = "tel:" + "1234567890";
 myIntent.setData(Uri.parse(phNum));
  startActivity( myIntent ) ;
Ninety answered 9/10, 2013 at 6:9 Comment(0)
T
4

To have the code within one line, try this:

startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:123456789")));

along with the proper manifest permission:

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

Hope this helps!

Tin answered 8/2, 2014 at 0:17 Comment(0)
I
2

For those using AppCompact...Try this

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.net.Uri;

public class MainActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button startBtn = (Button) findViewById(R.id.db);
        startBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                makeCall();
            }
        });

    }

    protected void makeCall() {
        EditText num = (EditText)findViewById(R.id.Dail);
        String phone = num.getText().toString();
        String d = "tel:" + phone ;
        Log.i("Make call", "");
        Intent phoneIntent = new Intent(Intent.ACTION_CALL);
        phoneIntent.setData(Uri.parse(d));
        try {
            startActivity(phoneIntent);
            finish();
            Log.i("Finished making a call", "");
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(this, "Call faild, please try again later.", Toast.LENGTH_SHORT).show();
        }
    }

}

Then add this to your manifest,,,

 <uses-permission android:name="android.permission.CALL_PHONE" />
Interject answered 11/9, 2017 at 14:8 Comment(0)
D
1

Also good to check is telephony supported on device

private boolean isTelephonyEnabled(){
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
return tm != null && tm.getSimState()==TelephonyManager.SIM_STATE_READY
}
Dolley answered 19/12, 2013 at 7:16 Comment(0)
R
1
I hope, this short code is useful for You,
   ## Java Code ##
 startActivity(new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+txtPhn.getText().toString())));



----------------------------------------------------------------------


Please check Manifest File,(for Uses permission)
## Manifest.xml ##
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dbm.pkg"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- NOTE! Your uses-permission must be outside the "application" tag
               but within the "manifest" tag. -->
## uses-permission for Making Call ##
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">

        <!-- Insert your other stuff here -->

    </application>

    <uses-sdk android:minSdkVersion="9" />
</manifest> 
Refectory answered 28/10, 2016 at 6:26 Comment(0)
S
0

I've just solved the problem on an Android 4.0.2 device (GN) and the only version working for this device/version was similar to the first 5-starred with CALL_PHONE permission and the answer:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);

With any other solution i got the ActivityNotFoundException on this device/version. How about the older versions? Would someone give feedback?

Survive answered 29/3, 2012 at 11:39 Comment(0)
B
0
Button customercare_call=findViewById(R.id.customercare_call); 
 customercare_call.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String phone = "Mobile Number";
            Intent intent = new  Intent(Intent.ACTION_DIAL,Uri.fromParts("tel", phone, null));    
            startActivity(intent);
        }
    });
Boiardo answered 6/7, 2023 at 10:43 Comment(0)
S
-1

With permission:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:9875432100"));
if (ActivityCompat.checkSelfPermission(yourActivity.this,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(yourActivity.this,
                        android.Manifest.permission.CALL_PHONE)) {
                } else {
                    ActivityCompat.requestPermissions(yourActivity.this,
                            new String[]{android.Manifest.permission.CALL_PHONE},
                            MY_PERMISSIONS_REQUEST_CALL_PHONE);
                }
            }
startActivity(callIntent);
Stethoscope answered 23/10, 2016 at 7:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.