2014-06-06 13 views
9

Tôi có 2 tiện ích con trong ứng dụng của mình. Cả hai đều có cùng các tính năng giống nhau nhưng với các bố cục khác nhau. Chúng hoạt động tốt trên mọi thiết bị nhưng có vẻ như có sự cố trên thiết bị Samsung. Mỗi lần tôi xuất bản phiên bản ứng dụng mới, tiện ích con sẽ bị xóa khỏi màn hình người dùng. Có vẻ như đây là lỗi Samsung TouchWiz nhưng người dùng cho tôi biết các ứng dụng khác không gặp sự cố này. Bất kỳ ý tưởng nào về những gì đang xảy ra?Widget biến mất mỗi khi ứng dụng được cập nhật trên các thiết bị Samsung

BTW Tôi suy nghĩ một lúc mà tôi tìm thấy một cách để sửa chữa nó trong bài viết trên blog này: https://medium.com/the-wtf-files/the-mysterious-case-of-the-disappearing-widget-f4177a8e2c2b nhưng tôi không gọi bằng tay

updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 

Thay vào đó tôi gọi

ComponentName cn = new ComponentName (ngữ cảnh, clazz); AppWidgetManager.getInstance (ngữ cảnh) .updateAppWidget (cn, views);

để cập nhật widget của tôi

Nhiều mã của tôi:

public static final int layout = R.layout.widget_large_layout; 
    public static final BitmapQualityEnum thumbnailQuality = BitmapQualityEnum.HIGH_RES; 
    public static final Class<?> clazz = LargeWidgetProvider.class; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     if (context != null && appWidgetIds != null && appWidgetIds.length > 0) { 
      // To prevent any ANR timeouts, we perform the update in a service 
      context.startService(new Intent(context, LargeWidgetProvider.UpdateService.class)); 
     } 
    } 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (context != null && intent != null) { 
      boolean doUpdate = true; 
      if ("android.appwidget.action.APPWIDGET_UPDATE".equals(intent.getAction())) { 
       final int[] widgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); 
       doUpdate = (widgetIds != null && widgetIds.length > 0); 
      } 

      if (doUpdate) { 
       WidgetProviderHelper.receive(context, intent, clazz, layout, thumbnailQuality); 
      } 
      super.onReceive(context, intent); 
     } 
    } 

public static class UpdateService extends Service { 

     private int serviceStartId = -1; 

     @Override 
     public boolean onUnbind(Intent intent) { 
      stopSelf(this.serviceStartId); 
      return true; 
     } 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      this.serviceStartId = startId; 
      // Push update for this widget to the home screen 
      updateData(this); 
      return START_STICKY; 
     } 

     @Override 
     public void onConfigurationChanged(Configuration newConfig) { 
      super.onConfigurationChanged(newConfig); 
      //   int oldOrientation = this.getResources().getConfiguration().orientation; 
      //   if (newConfig.orientation != oldOrientation) { 
      // Update the widget) { 
      updateData(this); 
      //   } 
     } 


     @Override 
     public IBinder onBind(Intent intent) { 
      // We don't need to bind to this service 
      return null; 
     } 
    } 
+0

Tôi đã gặp sự cố khi biến các tiện ích (và biểu tượng) trên thiết bị Samsung và hóa ra là bật/tắt các thành phần trong ứng dụng của tôi theo chương trình (các thành phần không liên quan đến chính tiện ích) đã làm hỏng TouchWiz. Nếu bạn đăng thêm mã widget của mình (như onReceive/onUpdate, tôi có thể kiểm tra xem có vấn đề gì không?) –

+0

Tôi nhận được đối số "ứng dụng của bạn có vấn đề này nhưng các ứng dụng khác không" nhiều. % trong số hàng trăm nghìn người dùng của tôi không có vấn đề này, vì vậy có vấn đề gì với thiết bị của bạn? ";-). Nếu một ứng dụng trong số chúng ta giả sử 200 có vấn đề (0,5%) so với 5 thiết bị trong số 100'000 cài đặt có vấn đề đó (0,005%) thì rõ ràng khả năng thiết bị gặp sự cố cao hơn ứng dụng có vấn đề. Tất nhiên sự thật thường là một nơi nào đó ở giữa và nó thường là một sự kết hợp của các yếu tố). –

+0

@Emanuel Moecklin nó không quan trọng nếu chỉ có một vài người dùng đang gặp vấn đề. Có thể 20 người dùng đã báo cáo sự cố trong số 500K + nhưng tất cả họ đều có thiết bị Samsung chung. Ngoài ra, hầu hết người dùng không sử dụng tiện ích ứng dụng và hầu hết người dùng không phàn nàn về các vấn đề có thể có. Vì vậy, có Tôi muốn khắc phục sự cố này;) – user1026605

Trả lời

2

Cuối cùng tôi quản lý để giải quyết vấn đề của tôi. Người nhận nhà cung cấp tiện ích cần được xuất khẩu !!

<receiver 
     android:name=".widget.HorizontalWidgetProvider" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      <action android:name="com.customEvent" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_horizontal_provider" /> 
    </receiver> 
+3

Theo http: // nhà phát triển này .android.com/guide/topics/manifest/receiver-element.html # export cờ đã xuất sẽ tự động được đặt thành true nếu người nhận có bộ lọc ý định nên tôi đoán đó là lỗi TouchWiz khác. –

Các vấn đề liên quan