Разработка плагина для PhoneGap

в 6:31, , рубрики: mobile development, phonegap, Блог компании «ООО «Рус Визардс»», кроссплатформенная разработка, мобильная разработка, метки: , ,

В настоящее время развитие кроссплатформенной разработки мобильных приложений набирает всё большие обороты. В этой статье я бы хотела обратить внимание на еще одно средство для реализации таких приложений — PhoneGap. Это бесплатный фреймворк с открытым исходным кодом для создания мобильных приложений.

PhoneGap позволяет создавать iOS, Android, Windows Phone, BlackBerry, Bada, Symbian, webOS приложения на HTML с использованием JavaScript. Количество скачиваний данного фреймворка уже привысило 1 миллион, а количество разработчиков достигает 400 000.

Разработка плагина для PhoneGap

Приложения, разработанные на PhoneGap, имеют небольшой размер, что очень удобно, однако, данный фреймворк описывает не все особенности работы с устройствами. В этой статье я расскажу о написании собственных плагинов для PhoneGap. Такие плагины необходимы для того, чтобы воспользоваться возможностями устройства, доступ к которым не предоставлен основным пакетом выше упомянутого фреймворка.

Для начала вам следует скачать PhoneGap на официальном сайте. В момент написания статьи его последняя версия была 2.0.0. Не будем заострять внимание на создании проекта, данный процесс описан здесь. В качестве платформы для разработки я выбрала Android.

Для начала приведу пример уже существующего плагина для запуска видеокамеры:

$('#makeVideo').click(function() {
	navigator.device.capture.captureVideo(captureSuccess,
		captureError, {
			limit : 1
		}
        );				
	function captureSuccess(mediaFiles) {
		console.log("Capturing video successfully finished");	
	}
	function captureError(error) {
		console.log("Video capture error + " + error.code);
	}
});

При создании своего собственного плагина необходимо начать с написания java класса:

public class IntentPlugin extends Plugin {
…
}

Здесь создадим несколько простых методов, которые будут срабатывать по нажатию кнопок в нашем phoneGap приложении (они могут быть как с параметрами, так и без них).

Метод запуска фотокамеры:

private void openPhotoCamera() throws IOException {
	Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	this.cordova.getActivity().startActivity(intent);
}

Метод запуска браузера:

private void openBrowse(String url) throws IOException {
	Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
	this.cordova.getActivity().startActivity(intent);
}

Метод запуска карты:

private void openMap(String url) throws IOException {
	Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(url));
	this.cordova.getActivity().startActivity(intent);
}

Далее следует создать перегруженный метод:

@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {		
	PluginResult.Status status = PluginResult.Status.OK;
	String result = "";
	try {
		if (action.equals("makePhoto")) {
			openPhotoCamera();
		} else if (action.equals("lookAtBrowse")) {
			openBrowse(args.getString(0));
		} else if (action.equals("lookAtMap")) {
			openMap(args.getString(0));
		} else {
			status = PluginResult.Status.INVALID_ACTION;
		}
		return new PluginResult(status, result);
	} catch (JSONException e) {
		return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
	} catch (IOException e) {
		return new PluginResult(PluginResult.Status.IO_EXCEPTION);
	}
}

где строки «makePhoto», «lookAtBrowse» и «lookAtMap» передаются нам из JavaScript файла.

На данном этапе всё выглядит давольно просто. Далее необходимо включить созданный плагин в файл config.xml, который находится в res/xml. Это делается следующим образом:

<plugin name="IntentPlugin" value="com.ruswizards.phonegapplugin.IntentPlugin"/>

В новом JS файле создадим объект класса IntentPlugin:

function IntentPlugin() {
};
if(!window.plugins) {
    window.plugins = {};
}
if (!window.plugins.intentPlugin) {
    window.plugins.intentPlugin = new IntentPlugin();
}

Рассмотрим процесс обращения к данному объекту на примере создания одной функции:

IntentPlugin.prototype.makePhotoFunction = function(url) {
    cordova.exec(null, null, "IntentPlugin", "makePhoto", [url]);
};

Теперь при вызове makePhotoFunction("") мы будем обращаться к методу openPhotoCamera().
То же самое и для остальных двух функций:

IntentPlugin.prototype.lookAtBrowseFunction = function(url) {
    cordova.exec(null, null, "IntentPlugin", "lookAtBrowse", [url]);
};
IntentPlugin.prototype.lookAtMapFunction = function(url) {
    cordova.exec(null, null, "IntentPlugin", "lookAtMap", [url]);
};

В файл, где данные функции будут вызываться, следует добавить:

<script type="text/javascript" charset="utf-8" src="intentPlagin.js"></script>

Вот всё и готово, теперь мы можем вызвать соответствующие функции.
Добавим в тело файла 4 кнопки:

<a id="makeVideo" data-role="button">Create video</a>					
<a id="makePhoto" data-role="button">Create photo</a>			
<a id="lookAtBrowse" data-role="button">Open browse</a>
<a id="lookAtMap" data-role="button">Open map</a>

Первая из них обрабатывает внутреннюю функцию, которая была описана в самом начале статьи; остальные — обращаются к функциям, которые были созданы своими силами. Это происходит следующим образом:

$('#makePhoto').click(function() {
		window.plugins.intentPlugin.makePhotoFunction("");		
});
	
$('#lookAtBrowse').click(function() {
	window.plugins.intentPlugin.lookAtBrowseFunction("http://www.google.com");				
});
	
$('#lookAtMap').click(function() {
	window.plugins.intentPlugin.lookAtMapFunction("geo:52.431198,31.004899");			
});

Итак, всё работает! Надеюсь эта статья оставила положительное впечатление, а также дала некоторую полезную информацию о написании приложений на PhoneGap.

Автор: mkolenchukova

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js