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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值