如何通过Android中的应用程序拨打电话?

时间:2014-10-09 15:13:37

标签: android

大家好我是android的新手,我在我的Activity上推送一个ImageButton后尝试做一个调用,我在stackoverflow上的其他问题上找到了这个片段。

icotelefono.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        //icotelefono.setVisibility(View.GONE);
        String url = "tel:3348292536";
        Intent intent_phone = new Intent(Intent.ACTION_CALL, Uri.parse(url));
        startActivity(intent_phone);
    }
});

但是当我点击按钮时,应用程序崩溃,我不知道为什么,因为当这个片段在MainActivity中扩展片段活动时一切顺利。但是当它在Activity中应该延伸Activity时应用程序崩溃。其他信息:我已经拥有清单中的权限。

[编辑] logcat的:

10-09 17:20:34.846: E/AndroidRuntime(4080): FATAL EXCEPTION: main
10-09 17:20:34.846: E/AndroidRuntime(4080): Process: com.example.findmyclients, PID: 4080
10-09 17:20:34.846: E/AndroidRuntime(4080): java.lang.NullPointerException
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.app.Activity.startActivityForResult(Activity.java:3532)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.app.Activity.startActivityForResult(Activity.java:3493)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.app.Activity.startActivity(Activity.java:3735)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.app.Activity.startActivity(Activity.java:3703)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at com.example.findmyclients.Hide_Unhide$1.onClick(Hide_Unhide.java:81)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.view.View.performClick(View.java:4654)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.view.View$PerformClick.run(View.java:19438)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.os.Handler.handleCallback(Handler.java:733)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.os.Handler.dispatchMessage(Handler.java:95)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.os.Looper.loop(Looper.java:146)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at android.app.ActivityThread.main(ActivityThread.java:5602)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at java.lang.reflect.Method.invokeNative(Native Method)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at java.lang.reflect.Method.invoke(Method.java:515)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
10-09 17:20:34.846: E/AndroidRuntime(4080):     at dalvik.system.NativeStart.main(Native Method)
10-09 17:20:36.391: I/Process(4080): Sending signal. PID: 4080 SIG: 9

谢谢大家。

2 个答案:

答案 0 :(得分:0)

您需要向您的清单添加权限:

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

答案 1 :(得分:0)

在实现父Activity类的系统提供的代码中出现NPE表明您可能正在使用Activity的子类的不正确初始化的实例。你的调用堆栈设法将几个方法下载到android.app.Activity的代码中,然后在尝试实际工作的第一个失败之前。

从稍微不同的版本中检查一些代码:

    public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
    if (mParent == null) {
        Instrumentation.ActivityResult ar =
            mInstrumentation.execStartActivity(
                this, mMainThread.getApplicationThread(), mToken, this,
                intent, requestCode, options);

我们看到尝试调用实例字段对象的方法,例如mInstrumentation,并且它可能是其中一个为null。

你写道:

  

当此片段在MainActivity中扩展片段活动时,一切顺利。但是当它在Activity中应该延伸Activity时应用程序崩溃。

这表明您可能正在尝试使用new创建自定义Activity类的实例。结果将是一个不正确的初始化实例,许多关键字段仍为空。

您无法使用new获取活动的有效实例,但只能使用Intent让系统为您创建一个