2017-07-03 55 views
1

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

Error:

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上显示它。请帮忙。

回答

0

here得到答案。

使用比例低于code.

Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 128, 128, true); 

现在,它的工作位。

相关问题