Reputation:
hi i have to implement some calling functionality in my app but when ever i select a Number for call suddenly my app got crash.
My code is:
public void show_alert(String phon) {
ArrayList<String> phone = new ArrayList<String>();
if (!phon.equalsIgnoreCase("")) {
phone.add(phon);
}
final CharSequence[] cs = phone.toArray(new CharSequence[phone.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(Contact.this);
builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setTitle("Would You Like to Call ");
builder.setItems(cs, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
call(Contact.this, cs[item].toString());
}
}).show();
}
public void call(Context ctx, String number) {
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + number));
ctx.startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
Log.e("helloandroid dialing example", "Call failed",
activityException);
}
}
I dont know what is wrong in my code. please some one help me.
Logcat:
03-20 15:47:12.771: E/AndroidRuntime(29736): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{422a3f38 29736:com.universaltyres/10075} (pid=29736, uid=10075) requires android.permission.CALL_PHONE
03-20 15:47:12.771: E/AndroidRuntime(29736): at android.os.Parcel.readException(Parcel.java:1327)
03-20 15:47:12.771: E/AndroidRuntime(29736): at android.os.Parcel.readException(Parcel.java:1281)
03-20 15:47:12.771: E/AndroidRuntime(29736): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1638)
03-20 15:47:12.771: E/AndroidRuntime(29736): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1385)
03-20 15:47:12.771: E/AndroidRuntime(29736): at android.app.Activity.startActivityForResult(Activity.java:3235)
03-20 15:47:12.771: E/AndroidRuntime(29736): at android.app.Activity.startActivity(Activity.java:3342)
03-20 15:47:12.771: E/AndroidRuntime(29736): at com.universaltyres.Contact.call(Contact.java:120)
03-20 15:47:12.771: E/AndroidRuntime(29736): at com.universaltyres.Contact$2.onClick(Contact.java:111)
03-20 15:47:12.771: E/AndroidRuntime(29736): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:924)
Upvotes: 0
Views: 870
Reputation: 47807
Your logcat clearly said:
3-20 15:47:12.771: E/AndroidRuntime(29736): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{422a3f38 29736:com.universaltyres/10075} (pid=29736, uid=10075) requires android.permission.CALL_PHONE
You need to add below permission in your manifest.xml
file
<uses-permission android:name="android.permission.CALL_PHONE" />
Upvotes: 2
Reputation: 1095
Have you provided CALL permission?
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
Upvotes: 2
Reputation: 157437
you should use Intent.ACTION_DIAL
instead of Intent.ACTION_CALL
. It will bring up the phone dialer, the same way others applications behave (same user experience)
Upvotes: 4