安装/卸载SD卡时,Widget会丢失其位图背景

时间:2011-05-02 10:12:36

标签: android bitmap android-widget widget sd-card

我的应用是一个小部件,背景是一个imageView。 在WidgetProvider的onUpdate()方法中,我将sdcard中的位图放在此imageView中,调用此方法:

public static void changeSkinWidget(Context context,String imageBackgroundPath) throws IOException{
     RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget);
     BitmapFactory.Options options = new BitmapFactory.Options();
     options.inSampleSize = 2;

     Log.i(Constants.DebugTag,"changeSkinWidget receive new path " +imageBackgroundPath);

     //Change Background Skin :
     FileInputStream is;
    try {
        is = new FileInputStream(new File(imageBackgroundPath
                + "background.png"));
        BufferedInputStream bis = new BufferedInputStream(is);
        Bitmap bm = BitmapFactory.decodeStream(is);
        views.setImageViewBitmap(R.id.ImageBackground01, bm);
        ComponentName thisWidget = new ComponentName(context,
                MyWidget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        manager.updateAppWidget(thisWidget, views);     
        bis.close();
        is.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

}

问题是我总是挂载/卸载SDCARD,小部件丢失了这个位图,而ImageView得到了布局声明中找到的defaut drawable(src = R.drawable.defaultbackground),似乎我的小部件被重新加载。 为了跟踪这个,我把onReceive()方法: Log.i(Constants.DEBUG_TAG,“RECEIVE INTENT:”+ intent.getAction()); 但是在logcat中没有出现任何内容......我预计可能是ACTION_APPWIDGET_UPDATE的意图 行动,但没有。

我还尝试将recycle()调用到我的位图......但这并没有解决问题。

安装/卸载时,我没有看到logcat的任何奇怪错误...

任何帮助都会很感激! 克里斯托弗。

1 个答案:

答案 0 :(得分:1)

解决方案是here

与实际解决方案无关的杂项说明...... 与小部件永远不应该移动到SD卡的方式类似,小部件也不应该引用SD卡上的资源。窗口小部件可以经常重新加载,并且需要访问该资源。一种可能的解决方案是将图像文件存储在widgets / data目录中的本地文件系统上。