Phonegap插件编写 Java面向对象方法

上一篇博文中我转载了别人写的phonegap的编写方法,简单回顾一下:

cordova中有Plugin这个类,编写的插件继承于这个类,其中有exec这个方法,根据第二个参数的命令进行判断,来决定该执行什么动作。所有的插件都要重写这个exec方法。然后通过plugin.xml的修改,来增加插件的记录。然后便是写js了。js通过cordova的exec这个方法来实现js和java之间的通信。然后可以通过window。plugin。*来使用定义好的js插件。很显然,在java中的代码是带着面向过程的思想的,而真正的面向对象的思想似乎是在js中体现的更加充分一点。

 java是典型的面向对象的高级语言,这似乎显得有点屈才。所以我找到了一种更加简单的方法来开发phonegap插件。使得js和java相关连只需要在主类(主类继承自Droidap)通过appView的addJavascriptInterface()这个方法,便可以实现js和java的关联。java代码还是按照面向对象的思想。那个方法的两个参数,一个是java对象,一个是js对象,然后我们便可以在js中通过js来使用java对象。与那个java对象相关联的其他java对象都可以获取直接使用。这个interface就好比是js通向java的一个洞,你通过这个洞看到的java对象都可以在js中直接使用。


下面贴出一段实例程序:

package com.yelbosh.plugin;


import org.apache.cordova.DroidGap;


import android.content.Context;
import android.telephony.TelephonyManager;
import android.webkit.WebView;
import com.yelbosh.plugin.People;


public class MyClass {
 private WebView mAppView;
 private DroidGap mGap;


 public MyClass(DroidGap gap, WebView view)
 {
   mAppView = view;
   mGap = gap;
 }


 public String getTelephoneNumber(){
   TelephonyManager tm = 
     (TelephonyManager) mGap.getSystemService(Context.TELEPHONY_SERVICE);
   String number = tm.getLine1Number();
   //String number = "11111";
   return number;
 }
 public People getPeople(){
 People mypeo = new People("hahah");
 return mypeo;
 }
}


这是定义的插件,其中还使用了People这个类。那么People类的定义如下:

package com.yelbosh.plugin;


public class People {
private String name;
public People(String name){
this.name = name;
}
public String getName(){
return this.name;
}


在主类中定义如下:

public class MainActivity extends DroidGap {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        super.loadUrl("file:///android_asset/www/test.html");
        appView.addJavascriptInterface(new MyClass(this,this.appView), "MyCls");
    }


在js代码中通过MyCls这个对象便可以直接使用MyClass对象,使用方法是一样的。

注意加上window,这是全局变量。因为是直接定义在浏览器中的。

a= window.MyCls.getPeople()

alert(a.getName())

就能得到想要的结果。


仔细想一想,其实编写插件的过程就是扩展浏览器的过程,使得js代码能够知道那些插件是干什么的。

那么,phonegap的原理是什么呢?

Android:通过拦截JavaScript的prompt命令实现从JavaScript到本地代码的通信。JavaScript prompt命令默认会弹出对话框,而PhoneGap的Android本地代码会拦截该对话框,并进一步取得JavaScript数据。相应的,Android上的PhoneGap内部,使用Java实现了一个HTTP服务器,通过持久性的XHR连接,JavaScript可以不断轮询内部XHR服务器存储的信息,从而实现了从Java到JavaScript方向的通信。

phonegap插件大多都是在功能上而并非是views上,所以你尽管随便写。


自己编写好的插件可以通过打包,供以后使用。但是注意在主类中做add声明。或许这可以通过xml来实现。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值