【问题标题】:Is there any API which can be used to make phone calls?是否有任何 API 可用于拨打电话?
【发布时间】:2012-10-22 13:31:00
【问题描述】:

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

但是现在,我想知道是否有一些 API 可用于开发网站,我将从 Android 手机启动该网站,然后 Web 服务将进行调用。

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

【问题讨论】:

  • 我的老公司不得不做类似的事情。我没有机会做太多工作。但我相信我们最终使用了 Voxeo。不确定它是否有帮助。或者方法是做一些类似于库马尔所说的事情。 voxeo.com

标签: java android web-applications


【解决方案1】:

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

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

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

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

-您创建意图并调用 startService。

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

- Activity 处理消息并显示进度。

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

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

-该服务会向您发送一条消息,说它已完成,它会杀死自己。

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

例如:

活动:

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();
    }
}

结果接收器:

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);
        }
    }
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢! :) 我想问,这是免费的吗?
    • 我在其网站上没有看到任何有关付款的信息,但没有提到它将是免费的...所以,如果您知道的话,请告诉我...而且我想要拨打其他电话,该电话在该电话上看起来是来自该号码的正常呼叫...这可能与 phono...因为他们提到 API 密钥...?
    • 是的,它使用了 Tropo 的电话 API,并且他们确实免费为开发者帐户提供了您的个人电话号码。但是对于该帐户,通话时间限制为 10 或 12 分钟。但这只是我,请在将其用于商业用途之前检查他们的条款和条件 -:)。
    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多