我的应用程序是一个小部件,其背景是一个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。
谢谢你的回答。但它并没有解决问题,只是为了测试我试图写我的PNG内部存储,并从这个内部存储文件创建一个新的位图....但问题在这里:-(任何想法? – 2011-05-03 06:52:12
对不起,关于该问题。我会研究另一种解决方案。你使用的是什么版本的Android?可能与http://code.google.com/p/android/issues/detail?id=8489 – 2011-05-03 09:31:51
有关吗?你是对的! !!!!!! – 2011-05-03 09:54:17