有没有可用于拨打电话的API?

时间:2012-10-22 13:31:01

标签: java android web-applications

我需要为Android手机创建一个应用程序,可以在有/无用户交互的情况下拨打电话。我从net和Stack Overflow(how to make a call, without using intent)中了解到它无法完成。

但是现在,我想知道是否有一些API可用于开发网站,我将从Android手机启动,网络服务将拨打电话。

我没有网络开发的背景。所以,我想确认这可能吗?也就是说,这可能是我提供了网站电话号码,它拨打电话,账单转到提供的号码(与他/她的电话和账单的一个电话相同,但他现在我不想要Android的应用程序进行调用。我希望自己的Web应用程序或某些Java应用程序进行调用),我不想使用其他服务提供商。

2 个答案:

答案 0 :(得分:4)

如果您的服务将成为您应用程序的一部分,那么您将使它变得比它需要的更复杂。由于您有一个从RESTful Web服务获取某些数据的简单用例,因此您应该查看ResultReceiver和IntentService。

当您要执行某些操作时,此Service + ResultReceiver模式通过使用startService()启动或绑定到服务来工作。您可以指定要执行的操作,并通过Intent中的extras传递ResultReceiver(活动)。

在服务中,您实现onHandleIntent以执行Intent中指定的操作。操作完成后,使用传入的ResultReceiver将消息发送回Activity,此时将调用onReceiveResult。

例如,您想从Web服务中提取一些数据。

- 您可以创建意图并调用startService。

- 服务中的操作开始,并向活动发送一条消息说明它  开始

- 活动处理邮件并显示进度。

- 该服务完成操作并将一些数据发送回您的活动。

- 您的活动处理数据并将其放入列表视图

- 该服务会向您发送一条消息,说明已完成,并且会自行终止。

- 活动获取完成消息并隐藏进度对话框。

<强>例如

活动:

public class HomeActivity extends Activity implements MyResultReceiver.Receiver {

    public MyResultReceiver mReceiver;

    public void onCreate(Bundle savedInstanceState) {
        mReceiver = new MyResultReceiver(new Handler());
        mReceiver.setReceiver(this);
        ...
        final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, QueryService.class);
        intent.putExtra("receiver", mReceiver);
        intent.putExtra("command", "query");
        startService(intent);
    }

    public void onPause() {
        mReceiver.setReceiver(null); // clear receiver so no leaks.
    }

    public void onReceiveResult(int resultCode, Bundle resultData) {
        switch (resultCode) {
        case RUNNING:
            //show progress
            break;
        case FINISHED:
            List results = resultData.getParcelableList("results");
            // do something interesting
            // hide progress
            break;
        case ERROR:
            // handle the error;
            break;
    }
}

服务:

public class QueryService extends IntentService {
    protected void onHandleIntent(Intent intent) {
        final ResultReceiver receiver = intent.getParcelableExtra("receiver");
        String command = intent.getStringExtra("command");
        Bundle b = new Bundle();
        if(command.equals("query") {
            receiver.send(STATUS_RUNNING, Bundle.EMPTY);
            try {
                // get some data or something           
                b.putParcelableArrayList("results", results);
                receiver.send(STATUS_FINISHED, b)
            } catch(Exception e) {
                b.putString(Intent.EXTRA_TEXT, e.toString());
                receiver.send(STATUS_ERROR, b);
            }    
        }
        this.stopSelf();
    }
}

<强> ResultReceiver:

public MyResultReceiver extends ResultReceiver {
    private Receiver mReceiver;

    public MyResultReceiver(Handler handler) {
        super(handler);
    }

    public void setReceiver(Receiver receiver) {
        mReceiver = receiver;
    }

    public interface Receiver {
        public void onReceiveResult(int resultCode, Bundle resultData);
    }

    @Override
    protected void onReceiveResult(int resultCode, Bundle resultData) {
        if (mReceiver != null) {
            mReceiver.onReceiveResult(resultCode, resultData);
        }
    }
}

答案 1 :(得分:1)

试试http://phono.com/。它提供各种电话API。