我想拨打文本框中给出的号码,但收到错误消息:
应用程序“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);
}
}
});
}
已编辑日志类别
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`
7条答案
按热度按时间xggvc2p61#
确保已将
<uses-permission ... />
标记添加到AndroidManifest.xml
文件中的正确级别(在<application ... />
标记的 * 外部 *,但在<manifest ... />
标记内部):disbfnqx2#
呼叫/开始呼叫有两种意图:
ACTION_CALL
和ACTION_DIAL
。ACTION_DIAL
只会打开填有号码的拨号器,但允许用户实际呼叫或拒绝呼叫。ACTION_CALL
将立即呼叫该号码,并需要额外的权限。所以一定要确保你有权限
在您
AndroidManifest.xml
中ddrv8njm3#
问题是您没有向用户请求权限。如果设备运行的是Android 6.0(API级别23),并且应用的targetSdkVersion为23或更高版本,则调用权限将被视为危险权限。因此,您必须首先获得正确的权限。首先,添加
到你的AndroidManifest.xml文件中
然后,我有一个方法是通过点击按钮来调用的。
ghhkc1vu4#
您可能需要尝试以下方法:
即添加
callIntent.setFlags(...)
函数调用。另外,不要忘记在清单文件中添加
CALL_PHONE
权限:n1bvdmb65#
API 24
并且还添加了
ufj5ltwl6#
尝试添加修剪():
cwdobuhd7#
你可能需要在真实的的设备上测试它。我遇到了同样的问题,它在真正的设备上工作。通话和GPS有时都不能像预期的那样在AVD中工作。