【症状】
droid.pickupImageFromGallery(callback)でギャラリーから写真を選択した際、
flags.mainHtmlUrlで設定した画面に遷移してしまい、コールバックが呼ばれなくなりました。
写真選択の前後でプロセスIDが変わっていることを確認しました。
WEBVIEWも再起動しているようです。
※本文最下部のエラーログと、ログ埋め込み箇所を参照ください。
【再現方法】
同一ソースでpickupImageFromGalleryを呼び出した際に、5回に1回程度の頻度で再現されます。
※本文最下部のエラーログと、ログ埋め込み箇所を参照ください。
【要望】
上記1から順に希望する解決策です。
(1)プロセスの変更が行われない状態になること
(2)コールバックを呼び出せる状態になること
(3)なんらかの形で、選択した写真のURIが取得できること
【バージョン】
1.180
【その他】
「アプリ開発ガイドブック」を買ってjsWaffleの存在を知りました。
jsWaffleでまったくの素人の自分でもAndroidアプリを作れていることに、感謝です。
これからも、よろしくお願いします。
【端末】
GaraxyS OS 2.3.3
【エラーログ】
07-23 16:13:57.964: DEBUG/jsWaffle(13727): onPause
07-23 16:13:57.995: DEBUG/jsWaffle(13727): droid._addEventListener(0)
07-23 16:13:58.015: DEBUG/jsWaffle(13727): droid:pause
07-23 16:14:01.843: DEBUG/jsWaffle(13727): onActivityResult:16711683,-1
07-23 16:14:01.843: ERROR/jsWaffle(13727): onActivityResult:16711683,-1,Intent { dat=content://media/external/images/media/1919 }
07-23 16:14:01.843: ERROR/jsWaffle(13727): onActivityResult2:content://media/external/images/media/1919
07-23 16:14:01.843: ERROR/jsWaffle(13727): onActivityResult3:
07-23 16:14:01.843: DEBUG/jsWaffle(13727): droid._pickupImageFromGallery('content://media/external/images/media/1919')
07-23 16:14:01.855: DEBUG/jsWaffle(13727): onResume
07-23 16:14:01.855: DEBUG/jsWaffle(13727): droid._addEventListener(1)
07-23 16:14:05.136: DEBUG/jsWaffle(13727): droid:resume
07-23 16:14:07.980: DEBUG/jsWaffle(13727): onPause
07-23 16:14:08.421: DEBUG/jsWaffle(13727): droid._addEventListener(0)
07-23 16:14:08.421: DEBUG/jsWaffle(13727): droid:pause
07-23 16:14:09.280: DEBUG/jsWaffle(13727): onActivityResult:2,0
07-23 16:14:09.284: ERROR/jsWaffle(13727): onActivityResult:2,0,null
07-23 16:14:09.284: DEBUG/jsWaffle(13727): null(0, null)
07-23 16:14:09.300: DEBUG/jsWaffle(13727): droid._startIntentForResult_callback(2,0)
07-23 16:14:09.300: DEBUG/jsWaffle(13727): onResume
07-23 16:14:09.300: DEBUG/jsWaffle(13727): droid._addEventListener(1)
07-23 16:14:10.132: DEBUG/jsWaffle(13727): droid:resume
07-23 16:14:12.277: DEBUG/jsWaffle(13727): onPause
07-23 16:14:12.331: DEBUG/jsWaffle(13727): droid._addEventListener(0)
07-23 16:14:12.347: DEBUG/jsWaffle(13727): droid:pause
07-23 16:14:19.050: DEBUG/jsWaffle(15896): onActivityResult:16711683,-1
07-23 16:14:19.054: ERROR/jsWaffle(15896): onActivityResult:16711683,-1,Intent { dat=content://media/external/images/media/1569 }
07-23 16:14:19.054: ERROR/jsWaffle(15896): onActivityResult2:content://media/external/images/media/1569
07-23 16:14:19.054: ERROR/jsWaffle(15896): onActivityResult3:
07-23 16:14:19.054: DEBUG/jsWaffle(15896): onResume
07-23 16:14:19.066: DEBUG/jsWaffle(15896): null('content://media/external/images/media/1569')
07-23 16:14:19.120: DEBUG/jsWaffle(15896): onPageStarted:file:///android_asset/www/index.html
07-23 16:14:22.089: DEBUG/jsWaffle(15896): onPageStarted:file:///android_asset/www/home.html
※1回目はコールバック成功、2回目で失敗しています。
【エラーログ埋め込み箇所】
//IntentPlugin.java
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
String param;
waffle_activity.log_error("onActivityResult:" + requestCode + "," + resultCode + "," + intent + "," + intent_startActivity_callback_gallery);
if (requestCode == ACTIVITY_REQUEST_CODE_BARCODE && intent_startActivity_callback_barcode != null) {
String contents = "";
String format = "text";
if (intent != null) {
contents = intent.getStringExtra("SCAN_RESULT");
format = intent.getStringExtra("SCAN_RESULT_FORMAT");
if (contents != null) contents = URLEncoder.encode(contents);
}
param = intent_startActivity_callback_barcode + "('" + contents + "','" + format + "')";
waffle_activity.callJsEvent(param);
} else if (requestCode == ACTIVITY_REQUEST_CODE_GALLARY) {
String fname = intent.getData().toString();
waffle_activity.log_error("onActivityResult2:" + fname + "," + intent_startActivity_callback_gallery);
param = intent_startActivity_callback_gallery + "('" + fname + "')";
waffle_activity.callJsEvent(param);
//waffle_activity.log_error("onActivityResult3:" + "," + intent_startActivity_callback_gallery);
} else if (
requestCode == IntentHelper.request_code &&
(IntentHelper.last_intent_type == MediaStore.ACTION_IMAGE_CAPTURE ||
IntentHelper.last_intent_type == MediaStore.ACTION_VIDEO_CAPTURE)
) {
cameraResult(requestCode, resultCode, intent);
} else {
if (intent_startActivity_callback == null) return;
param = intent_startActivity_callback + "(" + requestCode + "," + resultCode + ")";
waffle_activity.callJsEvent(param);
}
}