diff --git a/src/android/startApp.java b/src/android/startApp.java index e947e45..adb2d4f 100644 --- a/src/android/startApp.java +++ b/src/android/startApp.java @@ -25,6 +25,8 @@ import org.json.JSONException; import android.content.Context; import android.content.Intent; +import android.content.ComponentName; +import android.content.pm.PackageManager; /** * This class provides access to vibration on the device. @@ -34,8 +36,7 @@ public class startApp extends CordovaPlugin { /** * Constructor. */ - public startApp() { - } + public startApp() { } /** * Executes the request and returns PluginResult. @@ -46,37 +47,57 @@ public class startApp extends CordovaPlugin { * @return True when the action was valid, false otherwise. */ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { - if (action.equals("startapp")) { - this.startApp(args.getString(0)); + if (action.equals("start")) { + this.start(args, callbackContext); } - else { - return false; - } - - // Only alert and confirm are async. - callbackContext.success(); - return true; + else if(action.equals("check")) { + this.check( + args.getString(0), + callbackContext, + this.cordova.getActivity().getApplicationContext() + ); + } + + return true; } //-------------------------------------------------------------------------- // LOCAL METHODS //-------------------------------------------------------------------------- - - /** * startApp */ - public void startApp(String component) { - Intent LaunchIntent = this.cordova.getActivity().getPackageManager().getLaunchIntentForPackage(component); - /** - * If you want to pass parameters: - */ - /** - ComponentName comp = new ComponentName("com.component.name", "com.component.name.MainActivity"); - LaunchIntent.setComponent(comp); - LaunchIntent.putExtra("product_id", 102); - */ - - this.cordova.getActivity().startActivity(LaunchIntent); + public void start(JSONArray args, CallbackContext callback) { + // args.getString(0) - com name + // args.getString(1) - activity + // args.getString(2) - key + // args.getString(3) - value + try { + Intent LaunchIntent = this.cordova.getActivity().getPackageManager().getLaunchIntentForPackage(args.getString(0)); + + if(args.length() > 3) { + ComponentName comp = new ComponentName(args.getString(0), args.getString(1)); + LaunchIntent.setComponent(comp); + LaunchIntent.putExtra(args.getString(2), args.getString(3)); + } + + this.cordova.getActivity().startActivity(LaunchIntent); + callback.success(); + } catch (Exception e) { + callback.error(e.toString()); + } } + + /** + * checkApp + */ + public void check(String component, CallbackContext callback, Context context) { + PackageManager pm = context.getPackageManager(); + try { + pm.getPackageInfo(component, PackageManager.GET_ACTIVITIES); + callback.success(); + } catch (Exception e) { + callback.error(e.toString()); + } + } } diff --git a/test/main.js b/test/main.js index e8d8d1a..b5d87c9 100644 --- a/test/main.js +++ b/test/main.js @@ -21,5 +21,38 @@ function init() { - navigator.startApp('com.example.hello'); + /** + * check the application is installed + */ + navigator.startApp.check('com.teaway.teamenu', function(message) { /* success */ + console.log(message); // => OK + }, + function(error) { /* error */ + console.log('47', error); + }); + + /** + * start application without parameters + */ + navigator.startApp.start('com.teaway.teamenu', function(message) { /* success */ + console.log(message); // => OK + }, + function(error) { /* error */ + console.log('47', error); + }); + + /** + * start application with parameters + */ + navigator.startApp.start([ + 'com.teaway.teamenu', // applucation + 'com.teaway.teamenu.MainActivity', // activity + 'product_id', // key + '102' // value + ], function(message) { /* success */ + console.log(message); // => OK + }, + function(error) { /* error */ + console.log('47', error); + }); } diff --git a/www/startApp.js b/www/startApp.js index bf1ab63..e92eda2 100644 --- a/www/startApp.js +++ b/www/startApp.js @@ -1,4 +1,4 @@ -/* +cordova.define("org.apache.cordova.startapp.startapp", function(require, exports, module) { /* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -22,12 +22,17 @@ var exec = require('cordova/exec'); var platform = require('cordova/platform'); - /** Open a native alert dialog, with a customizable title and button text. * * @param {String} message app name * @param {Function} completeCallback The callback that is called when open app */ -module.exports = function(message, completeCallback) { - exec(completeCallback, null, "startApp", "startapp", [message]); -} \ No newline at end of file +module.exports = { + check: function(message, completeCallback, errorCallback) { + exec(completeCallback, errorCallback, "startApp", "check", [message]); + }, + start: function(message, completeCallback, errorCallback) { + exec(completeCallback, errorCallback, "startApp", "start", (typeof message === 'string') ? [message] : message); + } +} +});