Мое приложение - это виджет, фон которого - imageView.
В методе onUpdate () объекта WidgetProvider я поместил растровое изображение из 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 получает нарисованное по умолчанию изображение, которое можно найти в объявлении макета (src = R.drawable.defaultbackground), и кажется, что мой виджет перезагружается.
Чтобы отследить это, я включил метод onReceive ():
Log.i (Constants.DEBUG_TAG, "ПОЛУЧИТЬ ИНТЕНТ:" + intent.getAction ());
Но в logcat ничего не появляется ... Я ожидал, может быть, намерение с ACTION_APPWIDGET_UPDATE
действие, но ничего.
Я также пытался вызвать recycle () для своего растрового изображения ... это не решает проблему.
Я не вижу странной ошибки при просмотре logcat при монтировании / размонтировании ...
Любая помощь будет признательна!
Christophe.