`
萧_瑟
  • 浏览: 160114 次
社区版块
存档分类
最新评论

android PhoneGap 自定义插件

阅读更多

 

以"发送短信"功能 自定义插件 

 

最终效果:


 

项目目录结构:


 

如何搭建android PhoneGap这里就不提及了。

 

 

首先,index.html中布局,并结合JQuery定义事件。

 

index.html

 

<!DOCTYPE HTML>

<html>
<head>
<title>PhoneGap</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<script type="text/javascript" charset="utf-8" src="../js/jquery-1.7.1.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/phonegap.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/phonegap_messagePlugin.js"></script>

<script type="text/javascript">
	$(function(){
		var onSend = function(){
			
			//成功时执行该函数
			var success = function(data){
				alert("tel:" + data.target + "\ncontent:" + data.content);		
			};
			
			//失败时执行该函数
			var error = function(e){
				alert(e);
			};
			
			var tel = $('#tel').val();
			var content = $('#content').val();
			
			//message: 自定义phonegap_messagePlugin.js中定义的
			//send(...)函数: message对象的方法
			window.plugins.message.send(success,error,tel,content);
		};
		
		//发送按钮点击方法绑定
		$('#send').bind('click',onSend);
		
	});
</script>

</head>

<body>
	<div id="messageDiv">
		<input id="tel" type="tel" value="5556"/>
		<textarea id="content" rows="10" cols="25"></textarea>
		<button id="send" type="button">发送</button>
	</div>
</body>

</html>
 

 

 

接着,那么message从哪里来呢?

 

自定义一个Js文件用来处理我们自己的需要的逻辑

 

phonegap_messagePlugin.js

 

var Message = function() {
};

Message.prototype = {
		
	send: function(success,error,target,content){
		//调用MessagePlugin.java 的 send(...)方法
		PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);
	}	
};

PhoneGap.addConstructor(function(){
	//在PhoneGap中添加插件,注意要在plugins.xml中给它赋权限。
	PhoneGap.addPlugin("message",new Message);
});
 

 

     所以,window.plugins.message.send(....);message其实就是指向这个Message对象,然后在调用它的send函数。

 

 

那么,MessagePlugin又指什么呢?

 

这里就开始插件类的编写了。

 

MessagePlugin.java

package com.royal.plugins;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.telephony.SmsManager;

import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;

/**
 * 自定义插件类---短信插件
 * @author Royal
 *
 */
public class MessagePlugin extends Plugin{

	private static final String SEND = "send";
	
	@Override
	public PluginResult execute(String action, JSONArray data, String callbackId) {
		PluginResult result = null;
		if(SEND.equals(action)){
			try {
				//手机号
				String target = data.getString(0);
				//短信内容
				String content = data.getString(1);
				//这里引入的是android.telephony.SmsManager
				SmsManager sms = SmsManager.getDefault();
				//发送短信
				sms.sendTextMessage(target, null, content, null, null);
				
				//封装信息返回给index.html的success(data)函数执行
				JSONObject jsonObj = new JSONObject();
				jsonObj.put("target", target);
				jsonObj.put("content", content);
				//执行成功结果
				result = new PluginResult(PluginResult.Status.OK,jsonObj);
			} catch (JSONException e) {
				result = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
			}
		}else{
			//无效的执行
			result = new PluginResult(PluginResult.Status.INVALID_ACTION);
		}
		return result;
	}

}
 

 

所以,PhoneGap.exec(success,error,"MessagePlugin","send",[target,content]);这句代码

 

其中的MessagePlugin对应的就是上面的MessagePlugin.java这个类,send要对应匹配的就是MessagePlugin.java中execute里面的String action

 

 

最后将MessagePlugin.java这个插件类 在 xml/plugins.xml授权!

 

plugins.xml

<?xml version="1.0" encoding="utf-8"?>
<plugins>
    <plugin name="App" value="com.phonegap.App"/>
    <plugin name="Geolocation" value="com.phonegap.GeoBroker"/>
    <plugin name="Device" value="com.phonegap.Device"/>
    <plugin name="Accelerometer" value="com.phonegap.AccelListener"/>
    <plugin name="Compass" value="com.phonegap.CompassListener"/>
    <plugin name="Media" value="com.phonegap.AudioHandler"/>
    <plugin name="Camera" value="com.phonegap.CameraLauncher"/>
    <plugin name="Contacts" value="com.phonegap.ContactManager"/>
    <plugin name="Crypto" value="com.phonegap.CryptoHandler"/>
    <plugin name="File" value="com.phonegap.FileUtils"/>
    <plugin name="Network Status" value="com.phonegap.NetworkManager"/>
    <plugin name="Notification" value="com.phonegap.Notification"/>
    <plugin name="Storage" value="com.phonegap.Storage"/>
    <plugin name="Temperature" value="com.phonegap.TempListener"/>
    <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/>
    <plugin name="Capture" value="com.phonegap.Capture"/>
    
    <!-- 自定义plugin赋权限 -->
    <plugin name="MessagePlugin" value="com.royal.plugins.MessagePlugin"/>
</plugins>
 

同样,既然是发短信,当然也要在AndroidManifest.xml 授权发送短信权限

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.royal.plugins"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <!-- PhoneGap权限 -->
    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <!-- 发短信权限 -->
    <uses-permission android:name="android.permission.SEND_SMS" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".PhoneGap_messagePluginActivity"
            android:configChanges="orientation|keyboardHidden"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    
</manifest>
 

Ok,最后就这样了。 运行! 测试的时候再启动一个AVD咯。

 

 

 

总结:

 

    注意其流程步骤,如何分离。

    注意命名(包括各参数)。

    理解这个自定义插件demo,可自定义自己需要的一些其他插件。

    具体不用,理解即可。

 

 

该demo流程关联:


 

参考:http://gteam-yu.iteye.com/blog/1358707

 

  • 大小: 47.9 KB
  • 大小: 21 KB
  • 大小: 26.4 KB
分享到:
评论

相关推荐

    Phonegap自定义插件例子

    Phonegap自定义插件例子(Android) cordova3.4 详细课参阅我的博客: http://blog.csdn.net/xiaoluo5238/article/details/38711331

    自定义plugin插件实现phonegap与Android交互

    在"自定义plugin插件实现phonegap与Android交互"这个主题中,我们主要关注的是如何通过编写自定义插件来打通JavaScript和Android之间的通信壁垒。在PhoneGap中,Plugin是连接Web层和Native层的桥梁,它们是用Java...

    phonegap/Cordova和android自定义插件模块,cordova build后插件不会消失

    总的来说,理解和解决PhoneGap和Cordova中的自定义插件问题需要对这两个框架的工作原理有深入的理解,同时也需要熟悉Android的开发环境。遵循上述步骤,你应该能够有效地创建、管理和修复自定义插件的问题。

    Phonegap中自定义插件的使用

    在PhoneGap中,自定义插件是扩展这种功能的关键方式,尤其是当需要访问PhoneGap默认不支持或需要更深度集成的设备特性时。 在PhoneGap中创建自定义插件的步骤通常包括以下几个部分: 1. **结构设定**:首先,你...

    phonegap开发插件合集

    这个"phonegap开发插件合集"是一个包含了多种PhoneGap插件的资源包,覆盖了Android和iOS等多个平台,为开发者提供更丰富的功能扩展。 首先,我们来看看"短信收发插件"。在移动应用中,发送和接收短信是一项常见的...

    Cordova6.1、ionic、android交互自定义插件

    创建一个Cordova6.1与Android交互的自定义插件,首先需要熟悉Java和Android SDK,因为插件的实现部分将在Android项目中编写。你需要创建一个新的Android工程,包含一个继承自CordovaPlugin的类,并重写execute方法。...

    android+phonegap+jquery mobile

    PhoneGap通过插件系统将Web应用与设备API连接起来。 3. **jQuery Mobile**:jQuery Mobile是一个触屏优先的前端框架,专为移动设备设计。它简化了移动Web应用的创建,提供了统一的触摸友好的UI组件和交互效果。...

    phonegap调用android插件实现GPS定位

    在Android中,GPS定位涉及到Android的Location API,因此我们需要创建一个自定义的PhoneGap插件来调用这些API。 二、Android Location API Android的Location API提供了获取设备位置的能力,包括GPS(全球定位系统...

    Android PhoneGap开发简结

    - **插件的重要性**:由于PhoneGap提供的原生API有限,为了实现更复杂的功能,通常需要编写自定义插件。在Java层封装功能可以确保性能,而在JS层处理业务逻辑则简化了开发过程。 - **触摸事件支持**:PhoneGap对...

    PhoneGap/Cordova的支付宝Android插件

    在Android平台上,如果需要集成支付宝支付功能,就需要用到特定的插件,这就是我们讨论的“PhoneGap/Cordova的支付宝Android插件”。 支付宝是中国最大的第三方支付平台,广泛应用于电子商务、线上支付等多个领域。...

    phonegap打开文档插件

    在`FileOpener`压缩包中,可能包含的是这个插件的源码或者预编译版本,供开发者自定义或学习使用。了解其工作原理和结构有助于更有效地集成和定制插件功能。 总之,PhoneGap打开文档插件是使PhoneGap应用具备打开和...

    phonegap插件包Android版本

    4. **插件开发**:如果你需要自定义特定功能,你可以开发自己的PhoneGap插件。这涉及到编写JavaScript接口(通常位于`www`目录下的JS文件),以及对应的Android Java类,该类继承自CordovaPlugin,并重写`execute()`...

    PhoneGap Android插件 调用toast 和 notification

    在`config.xml`中添加`&lt;feature&gt;`标签,确保PhoneGap知道这个插件,并将`Notification.java`添加到Android平台的源代码目录。 总的来说,这个压缩包包含了一个完整的PhoneGap插件,用于在Android应用中调用`Toast`...

    android之PhoneGap入门实例

    在理解了PhoneGap的基础之后,开发者可以进一步学习如何创建自定义插件,以扩展PhoneGap的功能,满足更复杂的应用需求。同时,还可以探索Cordova插件库,那里有许多已经开发好的插件可供使用。 总之,"android之...

    Android PhoneGap简析

    PhoneGap的扩展性体现在其插件系统上,开发者可以创建自定义插件来扩展其功能,覆盖更多原生API。由于PhoneGap是开源的,社区活跃,有丰富的插件和文档支持,因此在成熟度上具有较高保障。 **结合地图应用的思考** ...

    Phonegap在安卓平台上的插件开发

    在Android平台上,自定义插件的开发为PhoneGap应用扩展了无限的可能性,使开发者能够访问Android系统的所有功能,同时保持HTML5应用的开发效率和可移植性。这个具体的MD5加密插件示例是一个很好的起点,可以帮助...

    phonegap完整例子!

    "是针对Android平台的一个示例项目,特别适合在pad设备上运行,并且包含了自定义插件的实现,这对于深入理解和使用PhoneGap技术尤其有帮助。 1. **PhoneGap基础概念** - PhoneGap基于Apache Cordova,是一个让...

    android与phonegap混合开发之相互跳转

    - 对于复杂的交互,可以考虑使用自定义插件,这样可以在JavaScript和Java之间创建更复杂的通信机制。 通过以上步骤,你就可以成功地在Android应用中集成PhoneGap,并实现它们之间的相互跳转和参数传递。这种方法...

    phonegap plugins (插件集)

    了解如何创建自定义插件对于扩展PhoneGap应用的功能非常有用,特别是当需要的特性未被现有的公共插件覆盖时。 总的来说,PhoneGap插件是连接Web应用和移动设备硬件的桥梁,它们使开发者能够充分利用跨平台框架的...

Global site tag (gtag.js) - Google Analytics