Cordova(PhoneGap)CordovaPluginプラグインによるActivityインスタンスの呼び出し


引用する
Cordova(PhoneGap)はHTML 5+JavaScriptハイブリッドモードを採用して携帯電話アプリを開発しているため、ページが携帯電話の内部の情報を取得する必要がある場合(例えば、連絡先情報、座標位置決め、メールなど)、プログラムは携帯電話の内部のAPIを呼び出してページの情報交換を行う必要がある.Cordovaは特に、ユーザーがプログラム編集を容易にするために、完全なソリューションをカスタマイズしています.この章では、CordovaとActivityの通信の実現原理を一つ一つ紹介します.
 
目次
一、CordovaPlugin類の紹介
二、ページはcordovaを通ります.exec関数呼び出しCordovaPluginプラグイン
三、CordovaInterfaceインタフェースの説明
四、ページはCordovaPluginプラグインによってActivity開発インスタンスを呼び出す
 
 
 
一、CordovaPlugin類の紹介
CordovaPluginはCordovaプラグインの親であり、ユーザーがカスタマイズしたプラグインは親を継承する必要があります.主な一般的なプロパティは次のとおりです.
ツールバーの
詳細な説明
CordovaWebView
PluginManager、CordovaWebViewEngine、ICordovaCookieManagerなど複数のオブジェクトを含むビューマネージャで、インタフェースレンダリング、ビューロードのライフサイクルを管理します.
CordovaInterface
startActivity ForResult、setActivity ResultCallbackなどの主なメソッドを定義し、呼び出しコンテキストのActivityオブジェクトを取得します.
CordovaPreferences
bundleのプロパティ値の管理に使用
表1.1
CordovaPluginの一般的な方法は以下の通りです.
方法
詳細な説明
void privateInitialize(String serviceName, CordovaInterface cordova, CordovaWebView webView, CordovaPreferences preferences)
プラグインの初期化時に実行されます.サービス名、cordovaInterfaceインタフェース、CodovaWebViewビュー、CordovaPreferencesプロパティなどの値を定義します.
boolean execute(String action, String rawArgs, CallbackContext callbackContext)
プラグインを開発するとき、ユーザーのカスタムメソッドです.ページがプラグインを呼び出すと、システムはまずこのメソッドを実行します.
boolean execute(String action, JSONArray args, CallbackContext callbackContext)
同上
boolean execute(String action, CordovaArgs args, CallbackContext callbackContext)
同上
void onActivityResult(int requestCode, int resultCode, Intent intent)
プラグインを開発するとき、ユーザのカスタムメソッドで、プラグインはstartActivity ForResult後のコールバック関数を呼び出します.
String getServiceName()
configファイル内のサービスの名前を取得
Boolean shouldAllowRequest(String url) 
このリクエストを許可するかどうかを判断する
Boolean shouldAllowNavigation(String url) 
このナビゲーションが許可されているかどうかを判断します
Boolean shouldOpenExternalUrl(String url) 
外部リンクを開くかどうかを判断
boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm)
boolean onReceivedClientCertRequest(CordovaWebView view, ICordovaClientCertRequest request)
表1.2
CordovaPluginの詳細な解析は公式サイトを参照してください.
http://cordova.apache.org/docs/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide
カタログに戻る
 
二、ページ呼び出しCordovaPluginプラグインの例
CordovaPluginクラスの使い方をよく知ってから、ページ呼び出しプラグインの例をご紹介します.まずファイルres/xml/configを開く.xmlはプラグインの構成です.
可用于运行环境中的常用参数,例如:全屏设置,滚动条设置,背景色设置等等


节点用于设置插件描述,feature的name属性是设置插件的唯一标示,在页面调用插件时将通过name找到此插件
在开发插件时,先为此插件添加一个节点,在中绑定插件的后台执行文件ShowMessagePlugin.java



    
    
    
    
        
        
    
    
        
    
    
    
    AndroidTest
    
    
        A sample Apache Cordova application that responds to the deviceready event.
    
    
    
        Apache Cordova Team
    
    
    
    
    
    
    
    
    
    
    
    

作成org.apache.cordova.showmessage.ShowMessagePluginクラス、CordovaPluginベースクラスを継承し、実装
bool execute(action,args,callbackcontext)メソッド.このメソッドは、ページがこのプラグインを呼び出すとデフォルトで実行されます.Actionは一意の識別子であり、システムは異なるactionに基づいて異なる操作を行うことができる.Argsはページ転送のパラメータであり,String,JsonArray,CordovaArgsの3つの異なるタイプをサポートする.callbackcontextはシステムのコンテキストであり、操作が完了するとcallbackcontextが呼び出される.success(マルチタイプパラメータをサポート)メソッドは、プラグイン操作が完了し、パラメータをページに返すことを示します.最終的にtrueに戻るとプラグインの実行に成功し、falseは実行に失敗したことを表します.
package org.apache.cordova.showmessage;

public class ShowMessagePlugin extends CordovaPlugin {
    @Override
    public boolean execute(String action,JSONArray args,CallbackContext context) 
            throws JSONException{      
        if(action.equals("mydream")){
            String msg=args.getString(0)+"'s dream is to become a "+args.getString(1);
            context.success(msg);
            return true;
        }
        return false;
    }
}

cordovaでjsパッケージの中で、最もよく使われるのはcordovaです.exec(success,failed,service,action,args)関数、ページはまさにこの関数を通じてプラグインを呼び出します.
successは、プラグインの実行に成功するコールバックをバインドするためのコールバック関数failedは、実行に失敗したコールバック関数serviceとconfigをバインドするために使用される.xmlプロファイルのfeatureバイトのname属性に対応するactionは、ShowMessagePluginオブジェクトboolean excuteメソッドのactionパラメータに対応し、プラグインが実行するメソッドタイプを分解するために使用され、プラグインはactionタイプによって分類処理されます.argsは入力パラメータ
Name:     
       Dream:    
        
       

テスト結果
カタログに戻る
 
三、CordovaInterfaceインタフェースの説明
CordovaInterfaceインタフェースのデフォルトは、Activityオブジェクトを含むCordovaInterfaceImplクラスによって実現されます.APPを開くと、CordovaはこのActivityをデフォルトで起動し、Cordovaコアエンジンを搭載してプログラムを管理します.ExecutorServiceではオブジェクトがスレッドプールを管理し、PluginManagerではプラグインを管理し、CordovaPluginではCordovaプラグインの親であり、すべてのプラグインがCordovaPluginを継承する必要があります.
ツールバーの
詳細な説明
Activity
APPを開くと、CordovaはこのActivityをデフォルトで起動し、Cordovaコアエンジンを搭載してプログラムを管理します.
ExecutorService
スレッドプールの管理
PluginManager
プラグインマネージャ、プラグインの生成、実行、終了などのライフサイクルを管理
CordovaPlugin
CordovaPluginプラグインをstartActivity ForResultメソッドでバインドする
ActivityResultHolder
内部クラス、requestCode、resultCode、intentなどのオブジェクトをカプセル化
表2.1
CordovaInterfaceImplは、3つの最も一般的な方法を定義しています.
方法
詳細な説明
void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode)
CordovaPluginパラメータをバインドし、ActivityオブジェクトのstartActivity ForResult(intent,requestCode)メソッドを呼び出し、intentバインド値に基づいて対応するactivityにジャンプします.
void setActivityResultCallback(CordovaPlugin plugin)
CordovaPluginオブジェクトを励起するonActivity Resultイベント
boolean onActivityResult(int requestCode, int resultCode, Intent intent)
ActivityオブジェクトのonActivity Resultコールバック関数をカプセル化し、CordovaPluginオブジェクトのonActivity Resultイベントを励起します.
表2.2
カタログに戻る
四、ページはCordovaPluginプラグインによってActivity開発インスタンスを呼び出す
第1節の例と同様に、cordovaをページに通過する.exec(success,failed,service,action,args)メソッドはプラグインを呼び出し、戻るとsuccess関数を呼び出して処理表示結果を呼び出す
    : 
       
        
        :        

プラグインはactionパラメータの判断により異なる処理を行い、その後、起動するActivityをIntentオブジェクトでバインドし、最後にCordovaInterfaceのstartActivity ForResult(cordovaPlugin,intent,int)メソッドによりこのActivityを起動する.Activityが終了すると、コールバック関数onActivity Result(int requestCode,int resultCode,Intent intent)が呼び出されます.
ここでは、現在のアクティビティとサブアクティビティの関係をバインドするために主に使用されるIntentクラスの用途について説明します.6つの構造関数が含まれています.
1、Intent()空構造関数
2、Intent(Intent o)コピー構造関数
3、Intent(String action)actionタイプの構造関数を指定する
4、Intent(String action,Uri uri)はActionタイプとUriの構造関数を指定し、URIは主にプログラム間のデータ共有ContentProviderである.
5、Intent(Context packageContext,Class>cls)がコンポーネントに伝達する構造関数、つまりこの例で使用する
6、Intent(String action,Uriuri,Context packageContext,Class>cls)の前二種類の結合体
IntentクラスにはBundleオブジェクトmExtrasがカプセル化されており、メインアクティビティとサブアクティビティの間の値伝達に使用できます.システムはputExtraメソッドでパラメータをmExtrasに転送したり、getShortExtra、getIntExtra、getBooleanExtra、getByteExtraなどの複数のメソッドでmExtrasからパラメータ値を取得したりすることができます.
public class ShowMessagePlugin extends CordovaPlugin {
    private CallbackContext context;
    
    @Override
    public boolean execute(String action,JSONArray args,CallbackContext context)
             throws JSONException{
        this.context=context;
        //  action      
        if(action.equals("showMessage")){
            //  Intent       Activity
            Intent intent=new Intent(this.cordova.getActivity(),SpotActivity.class);
            //       activity    
            intent.putExtra("province", args.getString(0));
            //  activity
            this.cordova.startActivityForResult(this, intent, 0);
        }
        return true;
    }
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        //   resultCode      
        if(resultCode==Activity.RESULT_OK){
            String spot=intent.getStringExtra("spot");
            context.success(spot);
        }
    }
}

Activityがトリガーされた後、setContentViewメソッドでビューをバインドし、intentオブジェクトから入力パラメータを取得して処理します.
操作が完了すると、戻り値はActivityクラスsetResult(int resultCode,Intent data)メソッドによってバインドされ、resultCodeはcordovaPluginプラグインによって戻り値を判断する処理結果として使用できます.最後にActivityオブジェクトのfinishメソッドを呼び出してSpotActivityを閉じ、CordovaPluginに戻ります.
public class SpotActivity extends Activity{
    private CheckBox chk1,chk2,chk3;
    
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //    
        setContentView(R.layout.goods_list);
        // intent       
        Integer province=Integer.parseInt(this.getIntent().getStringExtra("province"));
        setSpots(province);
    }
    
    private void setSpots(Integer n){
        this.chk1=(CheckBox)this.findViewById(R.id.checkBox1);
        this.chk2=(CheckBox)this.findViewById(R.id.checkBox2);
        this.chk3=(CheckBox)this.findViewById(R.id.checkBox3);
        switch(n){
            case 1:
                chk1.setText("  ");
                chk2.setText("   ");
                chk3.setText("     ");
                break;
            case 2:
                chk1.setText("   ");
                chk2.setText("   ");
                chk3.setText("     ");
                break;
            case 3:
                chk1.setText("   ");
                chk2.setText("   ");
                chk3.setText("   ");
                break;
            default:
                break;
        }
    }
    
    public void btn_onClick(View view){
        String spot="";
        if(chk1.isChecked())
            spot+=chk1.getText();
        if(chk2.isChecked())
            spot+=" "+chk2.getText();
        if(chk3.isChecked())
            spot+=" "+chk3.getText();
        //  setResult     
        Intent intent=new Intent();
        intent.putExtra("spot",spot);
        setResult(RESULT_OK,intent);
        //   activity,       cordovaPlugin  
        this.finish();
    }
}

Activityビュー                         
Activityがオフの場合、cordovaPluginプラグインはコールバック関数onActivity Result(int requestCode,int resultCode,Intent intent)を呼び出し、コールバック関数ではresultCodeパラメータに基づいて処理状況を判断し、異なる結果に基づいてintentの戻り値bundlerオブジェクトを異なる処理することができます.最後にcallbackContextオブジェクトのsuccess(string)メソッドを使用して処理結果をページに返信する.
処理結果:
カタログに戻る
本章のまとめ
Cordova(PhoneGap)技術はCordovaPluginプラグイン化(モジュール化)技術を用い,異なるプラグインを用いて異なるHTML 5ページを別々に処理している.同時に、システムはプラグインを利用してシステムの既存の地図、通信録、ブラウザなどの複数のAPIを呼び出し、HTML 5ページと情報交換を行い、HTML 5とAndroid、iOSシステムのシームレスな接続を実現することもできる.
 
 
参考記事
Cordova(PhoneGap)CordovaPluginプラグインによるActivityインスタンスの呼び出し
最新版Cordova 5.1.1(PhoneGap)構築開発環境
Apache2.2+Tomcat7.0統合構成の詳細
Windows Server 2008 R 2ロードバランシング入門編
 
 
 
作者:风尘浪子
http://www.cnblogs.com/leslies2/p/cordovaPlugin.html
オリジナル作品、転載時に作者と出典を明記してください