在下面的代码中,使用RESULT_CANCELED立即调用onActivityResult。
正如其他答案所示,我在startActivityForResult()和PluginResult #setKeepCallback(true);之前添加了setActivityResultCallback。但没有任何事情可以解决。 有什么建议吗?
....
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
this.callbackContext = callbackContext;
if (action.equals(ACTION_OPEN))
{
if(PermissionHelper.hasPermission(this, READ))
{
chooseFile();
}
}
else
{
return false;
}
return true;
}
public void chooseFile() {
final CordovaPlugin plugin = (CordovaPlugin) this;
Runnable worker = new Runnable() {
public void run() {
Intent filePickerIntent = new Intent(Intent.ACTION_PICK);
filePickerIntent.setType("image/*");
plugin.cordova.setActivityResultCallback(plugin);
plugin.cordova.startActivityForResult(plugin, Intent.createChooser(filePickerIntent,"Choose file"), PICK_FILE_REQUEST);
}
};
this.cordova.getThreadPool().execute(worker);
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
r.setKeepCallback(true);
callbackContext.sendPluginResult(r);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG,"Enter onActivityResult");
if (requestCode == PICK_FILE_REQUEST) {
Log.d(TAG,"requestCode == PICK_FILE_REQUEST");
if (resultCode == Activity.RESULT_OK) {
Log.d(TAG,"Result Ok");
Uri uri = data.getData();
Log.d(TAG, uri.toString());
} else if (resultCode == Activity.RESULT_CANCELED) {
Log.d(TAG,"Result canceled");
callbackContext.error("OPERATION_CANCELLED");
return;
}
this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, "UNKNOWN_ERROR"));
}
}
答案 0 :(得分:0)
在我的应用程序和安装cordova-plugin-background-mode之后,我遇到了类似的问题。对我来说android 4.4.2上存在问题,而不是android 6.0。为了解决这个问题,我在config.xml中设置了参数AndroidLaunchMode
<preference name="AndroidLaunchMode" value="singleTop" />
答案 1 :(得分:0)
我在我的一个cordova应用程序中遇到了同样的问题。我找不到错误的来源,但我通过创建新项目并再次安装所有插件来解决它。它奏效了。
答案 2 :(得分:0)
您不应使用setActivityResultCallback()
方法!
如果您签入cordova source,则会发现setActivityResultCallback
是内部方法,目的是在先前的活动仍在进行时使用onActivityResult
参数调用RESULT_CANCELED
未完成。
setActivityResultCallback
应该是Cordova代码中的私有方法,以避免此类错误。