2

私は PhoneGap と Jquery を使用してアプリを作成しています。私のアプリにはパニック ボタンがあり、onclick で事前定義された番号を自動的に呼び出す必要があります。ネイティブのAndroidダイヤラーを開くことができましたが、ユーザーが送信ボタンをもう一度クリックしてダイヤルする必要があります。

アプリから直接電話をかけるにはどうすればよいですか?

4

2 に答える 2

2

この機能用のプラグインを作成する必要があります。最初に行う必要があるのは、次を追加することです。

android.permission.CALL_PRIVILEGED

あなたの AndroidManifest.xml に。これにより、Dialer アプリをスキップして番号をダイヤルできるようになります。プラグイン インターフェイスには、少量の JavaScript コードが必要です。

cordova.define("cordova/plugin/emergencydialer", 
  function(require, exports, module) {
    var exec = require("cordova/exec");
    var EmergencyDialer = function () {};

    var EmergencyDialerError = function(code, message) {
        this.code = code || null;
        this.message = message || '';
    };

    EmergencyDialer.CALL_FAILED = 0;

    EmergencyDialer.prototype.call = function(telephoneNumber,success,fail) {
        exec(success,fail,"EmergencyDialer", "call",[telephoneNumber]);
    };

    var emergencyDialer = new EmergencyDialer();
    module.exports = emergencyDialer;
});

次に、電話をかけるための Java コードを記述する必要があります。Plugin クラスを拡張する新しいクラスを作成し、次のような実行メソッドを記述する必要があります。

public PluginResult execute(String action, JSONArray args, String callbackId) {
    PluginResult.Status status = PluginResult.Status.OK;
    String result = "";

    try {
        if (action.equals("call")) {
            String number = "tel:" + args.getString(0);
            Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(number)); 
            this.cordova.getActivity().startActivity(callIntent);
        }
        else {
            status = PluginResult.Status.INVALID_ACTION;
        }
        return new PluginResult(status, result);
    } catch (JSONException e) {
        return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
    }
}

このクラスの名前が何であれ、res/xml/config.xml ファイルに行を追加して、PluginManager が作成できるようにする必要があります。

<plugin name="EmergencyDialer" value="org.apache.cordova.plugins.EmergencyDialer"/>

最後に、JavaScript コードでプラグインを作成し、次のように呼び出す必要があります。

function panicButton() {
    var emergencyDialer = cordova.require("cordova/plugin/emergencydialer");
    emergencyDialer.call("18005551212");
}

それはそれについて行う必要があります。

于 2012-11-05T14:50:44.227 に答える