从视图中拨打电话

时间:2011-07-21 02:25:17

标签: android android-activity methods view phone-call

我有一个应用程序,其中包含一个显示我创建的自定义视图的活动(拨号盘)。自定义视图有拨号,一个用于显示输入数字的编辑文本和一个我想用来拨打用户输入号码的电话按钮。我试图为该按钮编写监听器。听众必须从编辑文本中获取数字并对其进行调用。

我找到了可用于拨打电话并将其放入我的活动中的代码:

public void call(String number){
    try {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse(number));
        startActivity(callIntent);
        } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
}

但是按钮的监听器位于自定义View类中。如何从View类中的按钮侦听器调用Activity内的call()方法?

*** 修改 * *

似乎有一种更简单的方法,我找到了可以插入View类的代码:

public void call(String number){
        Intent intent = new Intent(Intent.ACTION_CALL);
        String dialNumber = "tel:";
        dialNumber = dialNumber + number;
        intent.setData(Uri.parse(dialNumber));
        getContext().startActivity(intent);
    }

从侦听器调用此方法可以调用此方法。

1 个答案:

答案 0 :(得分:2)

即使您通过startActivity进行活动,也不宜在视图中调用活动。问题是您的View应该可移植到您要创建的任何Activity。通过直接调用或startActivity,您可以将其与单次使用相结合。你永远无法在任何地方重复使用它,但是使用startActivity()并不会做你认为它会做的事情。

相反,我会创建一个接口并向您的视图添加一个方法,允许Activity将自己注册为拨打号码的人的监听器。例如:

public interface DialListener {
   public void onDialed( String number );
}
...
public class SomeActivity extends Activity implements DialListener {
    public void onCreate( ... ) {
        YourCustomDialer dialer = (YourCustomerDialer)findViewById( R.id.dialer );
        dialer.setDialListener( this );
    }

    public void onDialed( String number ) {
        // do something here with dialed number
    }
}