Android 挂载/卸载SD卡时,小部件将丢失其位图背景
我的应用程序是一个小部件,背景是imageView。 在WidgetProvider的onUpdate()方法中,我将sdcard中的位图放入此imageView中,调用此方法:Android 挂载/卸载SD卡时,小部件将丢失其位图背景,android,bitmap,android-widget,widget,sd-card,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.getPackageN
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会获得布局声明中找到的defaut drawable(src=R.drawable.defaultbackground),而我的小部件似乎被重新加载。
为了跟踪这一点,我使用了onReceive()方法:
Log.i(Constants.DEBUG_标记,“接收意图:”+INTENT.getAction());
但logcat中没有显示任何内容…我可能希望有一个动作的意图\u APPWIDGET\u更新
行动,但什么也没有
我还尝试对位图调用recycle(),但这并不能解决问题
在安装/卸载logcat时,我没有看到任何奇怪的错误
任何帮助都将不胜感激!
克里斯托弗。解决方案是
与实际解决方案无关的杂项注释。。。
与决不应将小部件移动到SD卡类似,小部件也不应引用SD卡上的资源。小部件可以经常重新加载,它们需要访问该资源。一种可能的解决方案是将图像文件存储在widgets/data目录中的本地文件系统中。谢谢您的回答。但这并不能解决问题,只是为了测试,我尝试将png写入内部存储,并从这个内部存储文件创建了一个新的位图……但问题在于:-(有什么想法吗?很抱歉。我会研究另一个解决方案。你使用的安卓版本是什么?它可能与我刚才添加的:bm=bm.copy有关吗(Bitmap.Config.ARGB_8888,true);就在views.setImageViewBitmap(R.id.ImageBackground01,bm)之前;它可以工作……非常感谢……浪费了8个小时!非常感谢迈克!