2017-02-13 15 views
0

以下のコードでは、onActivityResultがRESULT_CANCELEDですぐに呼び出されます。startActivityForResultとRESULT_CANCELEDの直後にCordova 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

ソリューション@dpaksoniを見つけましたか? – user3050534

答えて

0

私のコードワーカーアプリケーションで同じ問題が発生しました。私はエラーの原因を見つけることができませんでしたが、私は新しいプロジェクトを作成し、すべてのプラグインを再度インストールすることで解決しました。出来た。

+0

私は同じことを試み、それは働いた。しかし、以前のプロジェクトの問題点はまだ混乱していました。 – dpaksoni

0

私のアプリでも、cordova-plugin-background-modeをインストールしても同様の問題が発生しました。私の問題はアンドロイド4.4.2であり、アンドロイド6.0では存在しません。この問題を解決するために、私はconfig.xmlにAndroidLaunchModeパラメータを設定しました

<preference name="AndroidLaunchMode" value="singleTop" /> 
関連する問題