0

Sencha Touch 2.0.1 & PhoneGap でアプリケーションを開発しています。
Sencha Touch 内で発生するイベントをキャッチして、ネイティブの Android 環境に転送する必要があります。

つまり、一部の sencha タッチ制御ボタンは、別のアクティビティ (非 PhoneGap アクティビティ) を開始するためにクリック時にインテントを起動する必要があります。

これまでのところ、webintentsthisなどのさまざまな例を見つけました。しかし、私が見る限り、これらは私の場合には当てはまりません。

PhoneGap を削除して別のラッパーを使用するか、何らかの方法でこの問題を回避しようとしています。前もって感謝します!

4

2 に答える 2

2

execute メソッド内からネイティブ アクティビティを起動する独自の phonegap プラグインを作成する必要があると思います。

独自のプラグインを作成するためのガイドとして使用できる ContactView プラグインがあります。

https://github.com/phonegap/phonegap-plugins/blob/master/Android/ContactView/ContactView.java

具体的にはこの2つの方法

    @Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
    startContactActivity();
    PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
    mPlugin.setKeepCallback(true);
    this.callback = callbackId;
    return mPlugin;
}

public void startContactActivity() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    this.ctx.startActivityForResult((Plugin) this, intent, PICK_CONTACT);
}
于 2012-04-07T09:09:42.077 に答える
0

これ、明示的および暗黙的なインテントセクション(1.2、1.3)を見てください: http ://www.vogella.de/articles/AndroidIntent/article.html

次に、WebIntent.javaのソースコード、特にstartActivity関数を見てください: https ://github.com/phonegap/phonegap-plugins/blob/master/Android/WebIntent/WebIntent.java

void startActivity(String action, Uri uri, String type, Map<String, String> extras) {
  Intent i = (uri != null ? new Intent(action, uri) : new Intent(action));

そして、ここでインテントコンストラクター(コンストラクターを検索): http ://developer.android.com/reference/android/content/Intent.html

WebIntentは、Androidクラスを取得するIntentコンストラクターをサポートしていません。

ただし、関数を拡張して、明示的な意図で機能させることができます(以下のコードは迅速で汚く、テストされていません)。

void startActivity(String action, Uri uri, String type, String className, Map<String, String> extras) {
  Intent i;
  if (uri != null)
    i = new Intent(action, uri)
  else if (className != null)
    i = new Intent(this.ctx, Class.forName(className));
  else
    new Intent(action));

上記のexecute関数では、「引数の解析」セクションの新しいパラメーターも解析する必要があります

// Parse the arguments
JSONObject obj = args.getJSONObject(0);
String type = obj.has("type") ? obj.getString("type") : null;
Uri uri = obj.has("url") ? Uri.parse(obj.getString("url")) : null;
String className = obj.has("className") ? obj.getString("className") : null;
JSONObject extras = obj.has("extras") ? obj.getJSONObject("extras") : null;

次に、startActivityの呼び出しで新しいclassName文字列を数行下に渡します。

startActivity(obj.getString("action"), uri, type, className, extrasMap);

次に、次のようなものを使用して、クラス名でAndroidアクティビティを呼び出すことができるはずです。

Android.callByClassName = function(className) { 
  var extras = {};
  extras[WebIntent.EXTRA_CUSTOM] = "my_custom";
  extras[WebIntent.EXTRA_CUSTOM2] = "my_custom2";
  window.plugins.webintent.startActivity({
    className: className, 
    extras: extras 
  }, 
  function() {}, 
  function() {
    alert('Failed to send call class by classname');
  }
); 

};

クラス名は次のようなものです:com.company.ActivityName

免責事項:大まかなコード、テストされていません。

于 2012-04-06T15:41:42.093 に答える