给phonegap添加一个支持跳转的插件

来源:互联网 发布:vm虚拟机下载 for mac 编辑:程序博客网 时间:2024/06/05 14:55


1、版本问题
phonegap 在2.0以前和2.0以后进行插件开发的方式不同,我这一次使用的是1.7的。
2、开发的步骤
第一、编写插件类:

com.ljp.laucher.util.TargetActivityPlugin.javapackage com.ljp.laucher.util;import org.apache.cordova.api.Plugin;import org.apache.cordova.api.PluginResult;import org.json.JSONArray;import android.app.Activity;import android.content.Intent;import android.os.Handler;import android.os.Message;import android.util.Log;public class TargetActivityPlugin extends Plugin {@Overridepublic PluginResult execute(String action, JSONArray data, String callbackID) {if(action.equals("startActivity")){              PluginResult result = null;                            try {                         PluginResult.Status status = PluginResult.Status.OK;                  if(action.equals("startActivity")){                       Log.e("test", "test plugin js -> java~~~~"+data.getString(0));                       Log.e("test", "test plugin js -> java~~~~");                                       result = new PluginResult(status, data.getString(0));                         Message msg=new Message();                      msg.what=1;                      msg.obj=data.getString(0);                      handler.sendMessage(msg);                  }              } catch (Exception e) {              }              return result;          }else {              return new PluginResult(PluginResult.Status.INVALID_ACTION);          }  }private Handler handler = new Handler() {         public void handleMessage(Message msg) {             if (msg == null) {                 return;             }             switch (msg.what) {             case 1:                 String className=msg.obj.toString();                 try {                     Class activityClass = Class.forName(className);                     Intent intent = new Intent(ctx.getContext(), activityClass);//浣犳兂鍘荤殑activity(exp:Temp)                     ctx.startActivityForResult(TargetActivityPlugin.this, intent, 1);                 } catch (ClassNotFoundException e) {                     e.printStackTrace();                 }                 break;             }         };     };        @Override   public void onActivityResult(int requestCode, int resultCode, Intent intent) {      // TODO Auto-generated method stub       if(requestCode==1){                if(resultCode == Activity.RESULT_CANCELED){                }            }else{                super.onActivityResult(requestCode, resultCode, intent);            }    }}



第二、在MiLaucher\res\xml\plugins.xml中添加自己的插件


<?xml version="1.0" encoding="utf-8"?><!--        Licensed to the Apache Software Foundation (ASF) under one       or more contributor license agreements.  See the NOTICE file       distributed with this work for additional information       regarding copyright ownership.  The ASF licenses this file       to you under the Apache License, Version 2.0 (the       "License"); you may not use this file except in compliance       with the License.  You may obtain a copy of the License at         http://www.apache.org/licenses/LICENSE-2.0       Unless required by applicable law or agreed to in writing,       software distributed under the License is distributed on an       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       KIND, either express or implied.  See the License for the       specific language governing permissions and limitations       under the License.--><plugins>    <plugin name="App" value="org.apache.cordova.App"/>    <plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/>    <plugin name="Device" value="org.apache.cordova.Device"/>    <plugin name="Accelerometer" value="org.apache.cordova.AccelListener"/>    <plugin name="Compass" value="org.apache.cordova.CompassListener"/>    <plugin name="Media" value="org.apache.cordova.AudioHandler"/>    <plugin name="Camera" value="org.apache.cordova.CameraLauncher"/>    <plugin name="Contacts" value="org.apache.cordova.ContactManager"/>    <plugin name="File" value="org.apache.cordova.FileUtils"/>    <plugin name="NetworkStatus" value="org.apache.cordova.NetworkManager"/>    <plugin name="Notification" value="org.apache.cordova.Notification"/>    <plugin name="Storage" value="org.apache.cordova.Storage"/>    <plugin name="Temperature" value="org.apache.cordova.TempListener"/>    <plugin name="FileTransfer" value="org.apache.cordova.FileTransfer"/>    <plugin name="Capture" value="org.apache.cordova.Capture"/>    <plugin name="Battery" value="org.apache.cordova.BatteryListener"/>    <plugin name="SplashScreen" value="org.apache.cordova.SplashScreen"/>    <plugin name="test01" value="com.elt.phonegaodemo4.test01"></plugin>//<plugin name="给插件起个名字(有人说这个名字要和插件类名一致,经我测试,不需要)" value="包名.类名(插件类)"></plugin><plugin name="TargetActivityPlugin" value="com.ljp.laucher.util.TargetActivityPlugin"></plugin></plugins>






第三、在MiLaucher\assets\www\js\cordova-1.7.0.js最后添加对应的js操作代码

var targetActivityAPI = function() {};targetActivityAPI.prototype.startActivity = function(success, error, testData1) {return PhoneGap.exec(success, error, 'TargetActivity', // java类名,plugins.xml中注册的名字'startActivity', // action,Java方法中用来匹配的字段[ testData1 ] // params 传递的参数,Array形式);};PhoneGap.addConstructor(function() {PhoneGap.addPlugin('targetActivityAPI', new targetActivityAPI());});





第四、在MiLaucher\assets\www\index.html中就可以使用这个插件了

<script src="js/cordova-1.7.0.js"></script><script type="text/javascript">var startActivity = function() {window.plugins.targetActivityAPI.startActivity(null,null, "com.ljp.laucher.MiLaucherActivity");}$("#back").live("click",  null, startActivity);</script>





第五、最后就是要在activity中载入html界面
package com.ljp.laucher;import org.apache.cordova.DroidGap;import android.os.Bundle;public class MainActivity extends DroidGap {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);//        setContentView(R.layout.main);        super.loadUrl("file:///android_asset/www/index.html");    }}





这样就可以使用这个插件了,
在开发这个插件的时候,自己也遇到了很多意想不到的问题,比如说js执行顺序问题,jquery绑定函数的问题,还有phonegap版本问题,等等!


简单记录一下吧:呵呵
jquery进行绑定函数的方式常用的有这两种:


$(".cell").bind("click", function() {location.href = "testinfo.html";});var startActivity = function() {window.plugins.targetActivityAPI.startActivity(null,null, "com.ljp.laucher.MiLaucherActivity");}$("#back").live("click",  null, startActivity);



记录结束!

	
				
		
原创粉丝点击