0

ユーザーの操作の有無にかかわらず電話をかけるには、Android携帯用のアプリケーションを作成する必要があります。私はネットとスタックオーバーフロー(意図を使わずに電話をかける方法)から、それができないことを学びました。

しかし今、私はウェブサイトを開発するために使用できる API があるかどうかを知りたいと思っています。これは Android フォンから起動し、ウェブ サービスは呼び出しを行います。

Web開発のバックグラウンドはありません。それで、これが可能であることを確認したいですか?つまり、私がウェブサイトの電話番号を提供し、それが電話をかけ、請求書が提供された番号に送られる可能性はありますか(彼/彼女の電話から電話があり、請求書が彼/彼女の番号に送られるのと同じです。しかし、今はしたくありません独自の Web アプリケーションまたは Java アプリケーションで呼び出しを行いたい場合)、他のサービス プロバイダーを使用したくありません。

4

2 に答える 2

4

サービスがアプリケーションの一部になる場合、必要以上に複雑になります。RESTful Web サービスからデータを取得する単純な使用例があるため、ResultReceiver と IntentService を調べる必要があります。

この Service + ResultReceiver パターンは、何らかのアクションを実行したいときに、startService() を使用してサービスを開始またはバインドすることで機能します。実行する操作を指定して、Intent のエクストラを介して ResultReceiver (アクティビティ) に渡すことができます。

サービスでは、Intent で指定された操作を行うために onHandleIntent を実装します。操作が完了したら、渡された 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();
    }
}

結果受信者:

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);
        }
    }
}
于 2012-10-22T13:36:02.693 に答える
1

http://phono.com/を試してください。あらゆる種類の電話 API を提供します。

于 2012-10-23T06:12:31.877 に答える