使用从URL下载的图像在主屏幕上创建快捷方式

时间:2017-07-03 08:29:56

标签: android image url bitmap shortcut

我正在尝试使用从特定网址下载的图片在主屏幕上创建快捷方式。我做的是,我从URL下载了图像并将其转换为位图并尝试创建快捷方式。但该应用程序崩溃显示以下错误。

  

错误:

FATAL EXCEPTION: main
Process: com.kalpnik.vrdevotee, PID: 10209
java.lang.RuntimeException: Failure from system
   at android.app.ContextImpl.sendBroadcast(ContextImpl.java:772)
   at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:396)
   at com.kalpnik.vrdevotee.Helper.ShortCutHelper.createShortcutIcon(ShortCutHelper.java:53)
   at com.kalpnik.vrdevotee.Components.CategoryInfoActivity$DownloadBitmapTask.onPostExecute(CategoryInfoActivity.java:110)
   at com.kalpnik.vrdevotee.Components.CategoryInfoActivity$DownloadBitmapTask.onPostExecute(CategoryInfoActivity.java:88)
   at android.os.AsyncTask.finish(AsyncTask.java:651)
   at android.os.AsyncTask.-wrap1(AsyncTask.java)
   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5459)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Caused by: android.os.TransactionTooLargeException: data parcel size 1049508 bytes
   at android.os.BinderProxy.transactNative(Native Method)
   at android.os.BinderProxy.transact(Binder.java:503)
   at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3128)
   at android.app.ContextImpl.sendBroadcast(ContextImpl.java:767)
   at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:396) 
   at com.kalpnik.vrdevotee.Helper.ShortCutHelper.createShortcutIcon(ShortCutHelper.java:53) 
   at com.kalpnik.vrdevotee.Components.CategoryInfoActivity$DownloadBitmapTask.onPostExecute(CategoryInfoActivity.java:110) 
   at com.kalpnik.vrdevotee.Components.CategoryInfoActivity$DownloadBitmapTask.onPostExecute(CategoryInfoActivity.java:88) 
   at android.os.AsyncTask.finish(AsyncTask.java:651) 
   at android.os.AsyncTask.-wrap1(AsyncTask.java) 
   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:148) 
   at android.app.ActivityThread.main(ActivityThread.java:5459) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

以下是我用来创建快捷方式的代码。

  public static void createShortcutIcon(Activity a, Context c, Categories parentCategory,
      Bitmap bitmap) {

    // Apend the entityName so we know what we are specifically looking for
    PREF_KEY_SHORTCUT_ADDED += "_" + parentCategory.getId();

    // Checking if ShortCut was already added
    SharedPreferences sharedPreferences =
        c.getSharedPreferences(Constants.APP_PREF_ID, Context.MODE_PRIVATE);
    boolean shortCutWasAlreadyAdded = sharedPreferences.getBoolean(PREF_KEY_SHORTCUT_ADDED, false);
    if (shortCutWasAlreadyAdded) return;

    Intent shortcutIntent = new Intent(c.getApplicationContext(), MainActivity.class);
    shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, parentCategory.getName());

    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(PREF_KEY_SHORTCUT_ADDED, true);
    editor.apply();

    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    addIntent.putExtra("duplicate", false);
    c.sendBroadcast(addIntent);

    // Remembering that ShortCut was already added

    Timber.d("Completed shortcut creation");
  }

我真的被困在这里了。无法为此找到任何解决方案。

我还尝试使用以下代码调整位图大小:

public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
    int width = image.getWidth();
    int height = image.getHeight();

    float bitmapRatio = (float) width / (float) height;
    if (bitmapRatio > 1) {
      width = maxSize;
      height = (int) (width / bitmapRatio);
    } else {
      height = maxSize;
      width = (int) (height * bitmapRatio);
    }

    return Bitmap.createScaledBitmap(image, width, height, true);
  } 

但使用此位图调整大小后不再有效。我不能在imageview上显示它。请帮忙。

1 个答案:

答案 0 :(得分:1)

here得到答案。

使用以下try{ doc = Jsoup.connect( URL ). userAgent(“chrome/34.0.1847.131”) .header(“Authorization”,”Basic”+encodedString) .followRedirects(true) .maxBodySize(0) .get(); } catch (IOException e) { }

缩放位图
code.

现在它正在运作。