2011-05-02 56 views
0

我的应用程序是一个小部件,其背景是一个imageView。 在WidgetProvider的的onUpdate()方法,我把位图从SD卡这个ImageView的内部调用这个方法:当SD卡安装/卸载时,Widget丢失位图背景

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(); 
    } 

} 

的问题是,我总是挂载/卸载SD卡,小部件失去这个位图,以及ImageView的得到布局声明(src = R.drawable.defaultbackground)中找到的defaut drawable,看起来我的小部件已重新加载。 要跟踪这个我把onReceive()方法: Log.i(Constants.DEBUG_TAG,“RECEIVE INTENT:”+ intent.getAction()); 但logcat中没有任何内容......我预计可能会有一个ACTION_APPWIDGET_UPDATE 操作的意图,但没有任何结果。

我也试图调用recycle()到我的位图...这并不能解决问题。

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

任何帮助将感激! Christophe。

回答

1

解决方案是here

其它指出无关的实际解决方案... 同样要怎么部件不应该被移动到SD卡,小部件也不能引用SD卡上的资源。小部件可以经常重新加载,他们需要访问该资源。一个可能的解决方案是将图像文件存储在本地文件系统的widgets/data目录中。

+0

谢谢你的回答。但它并没有解决问题,只是为了测试我试图写我的PNG内部存储,并从这个内部存储文件创建一个新的位图....但问题在这里:-(任何想法? – 2011-05-03 06:52:12

+0

对不起,关于该问题。我会研究另一种解决方案。你使用的是什么版本的Android?可能与http://code.google.com/p/android/issues/detail?id=8489 – 2011-05-03 09:31:51

+0

有关吗?你是对的! !!!!!! – 2011-05-03 09:54:17