1. 程式人生 > >Ionic更新APP後通過fileOpener開啟安裝完成後沒有提示視窗(開啟或完成)

Ionic更新APP後通過fileOpener開啟安裝完成後沒有提示視窗(開啟或完成)

Ionic更新APP後通過fileOpener開啟安裝完成後,沒有提示視窗(開啟或完成),比如你下載一個APP安裝成功後會給你一個反饋結果介面,接著你是要直接開啟APP呢就點選(開啟),你要是不想開啟呢就點選(完成),等你下次想用的時候開啟就行,就是這麼個反饋視窗。

處理方法:

找到platforms下的Android原始碼,找到fileOpener的Java類,新增如下程式碼:

一般該類目錄為:io.github.pwlin.cordova.plugins.fileopener2;

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

private void _open(String fileArg, String contentType, Boolean openWithDefault, CallbackContext callbackContext) throws JSONException {
    String fileName = "";
    try {
      CordovaResourceApi resourceApi = webView.getResourceApi();
      Uri fileUri = resourceApi.remapUri(Uri.parse(fileArg));
      fileName = this.stripFileProtocol(fileUri.toString());
    } catch (Exception e) {
      fileName = fileArg;
    }
    File file = new File(fileName);
    if (file.exists()) {
      try {
        Uri path = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        if ((Build.VERSION.SDK_INT >= 23 && !contentType.equals("application/vnd.android.package-archive")) || ((Build.VERSION.SDK_INT == 24 || Build.VERSION.SDK_INT == 25) && contentType.equals("application/vnd.android.package-archive"))) {

          Context context = cordova.getActivity().getApplicationContext();
          path = FileProvider.getUriForFile(context, cordova.getActivity().getPackageName() + ".opener.provider", file);
          intent.setDataAndType(path, contentType);
          intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
          intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//不加此句安裝成功後不會自動開啟安裝成功後介面
//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); List<ResolveInfo> infoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : infoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, path, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); } } else { intent.setDataAndType(path, contentType); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//不加此句安裝成功後不會自動開啟安裝成功後介面
} /* * @see * http://stackoverflow.com/questions/14321376/open-an-activity-from-a-cordovaplugin */ if (openWithDefault) { cordova.getActivity().startActivity(intent); } else { cordova.getActivity().startActivity(Intent.createChooser(intent, "Open File in...")); } callbackContext.success(); } catch (android.content.ActivityNotFoundException e) { JSONObject errorObj = new JSONObject(); errorObj.put("status", PluginResult.Status.ERROR.ordinal()); errorObj.put("message", "Activity not found: " + e.getMessage()); callbackContext.error(errorObj); } } else { JSONObject errorObj = new JSONObject(); errorObj.put("status", PluginResult.Status.ERROR.ordinal()); errorObj.put("message", "File not found"); callbackContext.error(errorObj); } }

如上,紅色部分即為需要修改的原始碼部分;

PS:Android專案下遇到此問題,只需在啟動APP是新增如上紅色部分即可;