Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.borismus.webintent;
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.cordova.DroidGap;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import android.content.Intent;
- import android.net.Uri;
- import android.util.Log;
- import android.text.Html;
- import org.apache.cordova.api.CordovaPlugin;
- import org.apache.cordova.api.CallbackContext;
- /**
- * WebIntent is a PhoneGap plugin that bridges Android intents and web
- * applications:
- *
- * 1. web apps can spawn intents that call native Android applications. 2.
- * (after setting up correct intent filters for PhoneGap applications), Android
- * intents can be handled by PhoneGap web applications.
- *
- * @author boris@borismus.com
- *
- */
- public class WebIntent extends Plugin {
- private String onNewIntentCallback = null;
- /**
- * Executes the request and returns PluginResult.
- *
- * @param action
- * The action to execute.
- * @param args
- * JSONArray of arguments for the plugin.
- * @param callbackId
- * The callback id used when calling back into JavaScript.
- * @return A PluginResult object with a status and message.
- */
- // NEU
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
- //
- try {
- if (action.equals("startActivity")) {
- if (args.length() != 1) {
- //return new PluginResult(PluginResult.Status.INVALID_ACTION);
- callbackContext.error();
- return true;
- }
- // Parse the arguments
- JSONObject obj = args.getJSONObject(0);
- String type = obj.has("type") ? obj.getString("type") : null;
- Uri uri = obj.has("url") ? Uri.parse(obj.getString("url")) : null;
- JSONObject extras = obj.has("extras") ? obj.getJSONObject("extras") : null;
- Map<String, String> extrasMap = new HashMap<String, String>();
- // Populate the extras if any exist
- if (extras != null) {
- JSONArray extraNames = extras.names();
- for (int i = 0; i < extraNames.length(); i++) {
- String key = extraNames.getString(i);
- String value = extras.getString(key);
- extrasMap.put(key, value);
- }
- }
- startActivity(obj.getString("action"), uri, type, extrasMap);
- //return new PluginResult(PluginResult.Status.OK);
- callbackContext.success();
- return true;
- } else if (action.equals("hasExtra")) {
- if (args.length() != 1) {
- return new PluginResult(PluginResult.Status.INVALID_ACTION);
- }
- Intent i = ((DroidGap)this.cordova.getActivity()).getIntent();
- String extraName = args.getString(0);
- return new PluginResult(PluginResult.Status.OK, i.hasExtra(extraName));
- } else if (action.equals("getExtra")) {
- if (args.length() != 1) {
- return new PluginResult(PluginResult.Status.INVALID_ACTION);
- }
- Intent i = ((DroidGap)this.cordova.getActivity()).getIntent();
- String extraName = args.getString(0);
- if (i.hasExtra(extraName)) {
- return new PluginResult(PluginResult.Status.OK, i.getStringExtra(extraName));
- } else {
- return new PluginResult(PluginResult.Status.ERROR);
- }
- } else if (action.equals("getUri")) {
- if (args.length() != 0) {
- return new PluginResult(PluginResult.Status.INVALID_ACTION);
- }
- Intent i = ((DroidGap)this.cordova.getActivity()).getIntent();
- String uri = i.getDataString();
- return new PluginResult(PluginResult.Status.OK, uri);
- } else if (action.equals("onNewIntent")) {
- if (args.length() != 0) {
- return new PluginResult(PluginResult.Status.INVALID_ACTION);
- }
- this.onNewIntentCallback = callbackId;
- PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
- result.setKeepCallback(true);
- return result;
- } else if (action.equals("sendBroadcast"))
- {
- if (args.length() != 1) {
- return new PluginResult(PluginResult.Status.INVALID_ACTION);
- }
- // Parse the arguments
- JSONObject obj = args.getJSONObject(0);
- JSONObject extras = obj.has("extras") ? obj.getJSONObject("extras") : null;
- Map<String, String> extrasMap = new HashMap<String, String>();
- // Populate the extras if any exist
- if (extras != null) {
- JSONArray extraNames = extras.names();
- for (int i = 0; i < extraNames.length(); i++) {
- String key = extraNames.getString(i);
- String value = extras.getString(key);
- extrasMap.put(key, value);
- }
- }
- sendBroadcast(obj.getString("action"), extrasMap);
- return new PluginResult(PluginResult.Status.OK);
- }
- return new PluginResult(PluginResult.Status.INVALID_ACTION);
- } catch (JSONException e) {
- e.printStackTrace();
- return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
- }
- }
- @Override
- public void onNewIntent(Intent intent) {
- if (this.onNewIntentCallback != null) {
- PluginResult result = new PluginResult(PluginResult.Status.OK, intent.getDataString());
- result.setKeepCallback(true);
- callbackContext.sendPluginResult(result);
- //this.success(result, this.onNewIntentCallback);
- }
- }
- void startActivity(String action, Uri uri, String type, Map<String, String> extras) {
- Intent i = (uri != null ? new Intent(action, uri) : new Intent(action));
- if (type != null && uri != null) {
- i.setDataAndType(uri, type); //Fix the crash problem with android 2.3.6
- } else {
- if (type != null) {
- i.setType(type);
- }
- }
- for (String key : extras.keySet()) {
- String value = extras.get(key);
- // If type is text html, the extra text must sent as HTML
- if (key.equals(Intent.EXTRA_TEXT) && type.equals("text/html")) {
- i.putExtra(key, Html.fromHtml(value));
- } else if (key.equals(Intent.EXTRA_STREAM)) {
- // allowes sharing of images as attachments.
- // value in this case should be a URI of a file
- i.putExtra(key, Uri.parse(value));
- } else if (key.equals(Intent.EXTRA_EMAIL)) {
- // allows to add the email address of the receiver
- i.putExtra(Intent.EXTRA_EMAIL, new String[] { value });
- } else {
- i.putExtra(key, value);
- }
- }
- ((DroidGap)this.cordova.getActivity()).startActivity(i);
- }
- void sendBroadcast(String action, Map<String, String> extras) {
- Intent intent = new Intent();
- intent.setAction(action);
- for (String key : extras.keySet()) {
- String value = extras.get(key);
- intent.putExtra(key, value);
- }
- ((DroidGap)this.cordova.getActivity()).sendBroadcast(intent);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement