Android应用程序调用button上的数字点击

我想调用一个文本框中给出的数字,但我得到的错误:

应用程序“xyz”(进程com.android)意外停止

以下是我的代码。 哪里出问题了?

EditText txtPhn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button callButton = (Button)findViewById(R.id.btnCall); txtPhn = (EditText)findViewById(R.id.txtPhnNumber); callButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString())); startActivity(callIntent); } catch (ActivityNotFoundException activityException) { Log.e("Calling a Phone Number", "Call failed", activityException); } } }); } 

EDITED LogCat

 03-09 11:23:25.874: ERROR/AndroidRuntime(370): FATAL EXCEPTION: main 03-09 11:23:25.874: ERROR/AndroidRuntime(370): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxx-xxx-xxxx flg=0x10000000 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{40738d70 370:org.krish.android/10034} (pid=370, uid=10034) requires android.permission.CALL_PHONE 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.os.Parcel.readException(Parcel.java:1322) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.os.Parcel.readException(Parcel.java:1276) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.app.Activity.startActivityForResult(Activity.java:2827) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.app.Activity.startActivity(Activity.java:2933) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at org.krish.android.caller$1.onClick(caller.java:29) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.view.View.performClick(View.java:2485) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.view.View$PerformClick.run(View.java:9080) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.os.Handler.handleCallback(Handler.java:587) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.os.Handler.dispatchMessage(Handler.java:92) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.os.Looper.loop(Looper.java:123) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at android.app.ActivityThread.main(ActivityThread.java:3683) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at java.lang.reflect.Method.invokeNative(Native Method) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at java.lang.reflect.Method.invoke(Method.java:507) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 03-09 11:23:25.874: ERROR/AndroidRuntime(370): at dalvik.system.NativeStart.main(Native Method)`enter code here` 

Solutions Collecting From Web of "Android应用程序调用button上的数字点击"

确保你已经在AndroidManifest.xml文件(在<application ... />标签之外,但在<manifest ... />标签之内)添加了正确的<uses-permission ... />标签:

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

有两个意图调用/开始调用:ACTION_CALL和ACTION_DIAL。

ACTION_DIAL只会打开拨号号码,但允许用户实际拨打或拒绝来电。 ACTION_CALL将立即调用该号码并需要额外的权限。

所以确保你有权限

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

在你的AndroidManifest.xml中

问题是你没有请求用户的许可。 如果设备运行的是Android 6.0(API级别23),且应用程序的targetSdkVersion为23或更高,则呼叫权限将被视为危险权限。 因此,您必须先获得正确的许可。 首先,添加

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.CALL_PHONE" /> ... </manifest> 

到您的AndroidManifest.xml文件中。

然后,我通过点击一个button来调用一个方法。

 public void onCall(View view) { Intent callIntent = new Intent(Intent.ACTION_CALL); //use ACTION_CALL class callIntent.setData(Uri.parse("tel:0800000000")); //this is the phone number calling //check permission //If the device is running Android 6.0 (API level 23) and the app's targetSdkVersion is 23 or higher, //the system asks the user to grant approval. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { //request permission from user if the app hasn't got the required permission ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, //request specific permission from user 10); return; }else { //have got permission try{ startActivity(callIntent); //call activity and make phone call } catch (android.content.ActivityNotFoundException ex){ Toast.makeText(getApplicationContext(),"yourActivity is not founded",Toast.LENGTH_SHORT).show(); } } } 

您可能想要尝试以下方法:

 Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString())); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(callIntent); 

即joincallIntent.setFlags(...)函数调用。

API 24

 Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:+94720999666")); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } startActivity(intent); 

并添加

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

尝试添加trim():

 callIntent.setData(Uri.parse("tel:"+txtPhn.getText().toString().trim())); 

您可能需要在真实设备上进行testing。 我面临同样的问题,它在真实的设备上工作。 呼叫和GPS都有时不按预期在AVD工作。