2016-09-02 3 views
0

공유 환경 설정없이 재부팅 한 후 응용 프로그램 1 * 1 위젯을 유지하는 방법, 이미지 뷰의 이미지는이은 내가 위젯의 1 * 1 개 widget.The 레이아웃 이미지 뷰가 포함되어 만든

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.layout_appwidget_small); 
    Intent defineIntent = new Intent(context, MainActivity.class); 
    defineIntent.putExtra("from_widget", true); 
    PendingIntent pendingIntent1; 
    views.setImageViewResource(R.id.img_widget,R.drawable.ic_launcher); 
    defineIntent.putExtra("type_from_widget", 1); 
    pendingIntent1 = PendingIntent.getActivity(context, 0, defineIntent, 0); 
    views.setOnClickPendingIntent(R.id.img_widget, pendingIntent1); 
    appWidgetManager.updateAppWidget(intExtra, views); 

처럼 설정 하지만 ConfigurationActivity의 일부 조건을 확인하여 ImageView의 이미지를 선택합니다. 위젯의 세부 정보를 AppWidgetId와 공유 환경 설정에 저장하고 재부팅 한 후에 유지 관리하는 데 몇 초가 걸립니다. 앱 데이터가 지워진 후 기기를 재부팅 할 때 또 다른 주요 이유 위젯이 비워집니다.

데이터가 공유 환경 설정에 저장됩니다. 내가 공유 환경 설정에서 세부 사항을 저장하지 않고 위젯 이미지를 유지해야 내 위젯

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if(intent.getBooleanExtra("from_config_activity",false)){ 
     for (int mAppWidgetId : intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)) { 
      update(mAppWidgetId,intent.getIntExtra("image_id",0)); 
     } 
    } 
    if(intent.getBooleanExtra("switch_on",false)){ 

     AppWidgetManager appWidgetManager = AppWidgetManager 
       .getInstance(context); 
     SharedPreferences settings = context.getSharedPreferences("prefs", 0); 
     if(settings != null) { 
      Gson gson = new Gson(); 
      String json = settings.getString("widget_arraylist", null); 
      Type type = new TypeToken<ArrayList<WidgetBean>>() {}.getType(); 
      MainActivity.widgetBeanArrayList = gson.fromJson(json, type); 

      if(MainActivity.widgetBeanArrayList!=null) { 
       if (MainActivity.widgetBeanArrayList.size() > 0){ 
        for(int i = 0;i < MainActivity.widgetBeanArrayList.size();i++){ 
         RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.layout_appwidget_small); 
         if(MainActivity.widgetBeanArrayList.get(i).icon == 1) { 
          views.setImageViewResource(R.id.img_widget, R.drawable.feed_detail_share); 
         }else if(MainActivity.widgetBeanArrayList.get(i).icon == 2){ 
          views.setImageViewResource(R.id.img_widget, R.drawable.feed_detail_edit); 
         }else if(MainActivity.widgetBeanArrayList.get(i).icon == 3){ 
          views.setImageViewResource(R.id.img_widget, R.drawable.feed_list_audio); 
         } 
         Intent defineIntent = new Intent(context, MainActivity.class); 
         defineIntent.putExtra("from_widget", true); 
         PendingIntent pendingIntent1 = PendingIntent.getActivity(context, 0, defineIntent, 0); 
         views.setOnClickPendingIntent(R.id.img_widget, pendingIntent1); 
         appWidgetManager.updateAppWidget(MainActivity.widgetBeanArrayList.get(i).id, views); 
        } 

       } 
      } 

     }else{ 
      Log.d("tag", "=============settingd=====null==="); 
     } 
    } 

의 AppWidgetProvider 클래스의 onReceive 방법을 검색하고 유지

SharedPreferences prefs = context.getSharedPreferences("prefs", 0); 
SharedPreferences.Editor edit = prefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(MainActivity.widgetBeanArrayList); 
edit.putString("widget_arraylist", json); 
edit.commit(); 

. 제안 사항이 있으십니까?

미리 감사드립니다.

답변

0

onEnabled()에서 장치를 재부팅 한 후에 논리를 만드는 것이 좋습니다.

@Override 
     public void onEnabled(Context context) { 
     // Enter relevant functionality for when the first widget is created(this callback gonna be first after rebooting device) 
     final AppWidgetManager appWidgetManager = 
     AppWidgetManager.getInstance(context); 
     int widgets_IDs[] = appWidgetManager.getAppWidgetIds(new ComponentName(context, AppWidgetProvider.class)); 
     for (int widget_id : widgets_IDs) { 
     //...get data from shared preference and fill ur widgets by ids 
     } 
    } 

앱 데이터가 삭제 된 후 위젯의 현재 상태를 되돌릴 적절한 방법이 없습니다. 따라서 사용자가 위젯에 대한 새로운 설정을 선택하도록 구성 활동을 이동하십시오.