6

Tôi đã làm việc với vấn đề này trong ba ngày và tôi đã xem xét mọi câu hỏi đơn lẻ ở đây để có câu trả lời. Tôi có một widget với một nút trên đó và tất cả những gì tôi muốn làm là bắt đầu một dịch vụ mỗi khi nó được nhấn. Vấn đề là nút ngừng hoạt động ngẫu nhiên. Tôi không thể tái tạo nó và tôi không biết nguyên nhân gây ra nó. Dịch vụ của tôi gọi stopSelf(); nhưng tôi đã có vấn đề này với một máy thu phát sóng cũng vì vậy tôi tin rằng vấn đề được trong các widget và không phải trong dịch vụ. Đây là mã sốAndroid Widget ngừng hoạt động ngẫu nhiên

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]  appWidgetIds) 
{ 

Log.i("Widget", "onUpdate"); 

final int N = appWidgetIds.length; 

    for (int i=0; i<N; i++) 
    { 

     int appWidgetId = appWidgetIds[i]; 

     Log.i("Widget", "onUpdateLoop"); 


     Intent intent = new Intent(context, ServiceWidgetAction.class); 
     intent.setAction(Long.toString(System.currentTimeMillis())); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     PendingIntent pendingIntent = PendingIntent 
       .getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     RemoteViews views = new RemoteViews(context.getPackageName(), 
       R.layout.widget); 

     views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent); 

     views.setTextViewText(
       R.id.widgetTextView, 
       "Some text"); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 

    } 

} 

Tôi đã kiểm tra mã này nhiều lần và tôi không biết tại sao nó lại làm điều này. Nó thực hiện điều này trên 3 điện thoại riêng biệt và tôi không thể tạo lại nó. Tôi đã cố gắng ngăn chặn các ứng dụng, thanh toán bù trừ nó từ một người quản lý nhiệm vụ thêm widget mới vv để có được các widget để ngừng làm việc và nó sẽ không. Tuy nhiên, khi tôi thức dậy sáng nay, tiện ích không còn hoạt động nữa. Mọi sự trợ giúp sẽ rất được trân trọng.

+0

Bạn có thấy gì trong LogCat khi nó xảy ra không? – CaseyB

+0

Không có gì trong logcat, giống như có một nút không có phương thức onClick trong một hoạt động. Tôi có thể thấy rằng nó được nhấn nhưng không có gì xảy ra trong ứng dụng hoặc logcat. –

Trả lời

10

tôi đã kết thúc tìm ra vấn đề. Tôi đã cập nhật tiện ích từ những nơi khác trong ứng dụng và tôi không có mã hoàn chỉnh cho từng ứng dụng. Nói cách khác ứng dụng của tôi cập nhật TextView trong các phụ tùng như thế này

RemoteViews views = new RemoteViews(context.getPackageName(), 
      R.layout.widget); 

    views.setTextViewText(
      R.id.widgetTextView, 
      "Some text"); 

    appWidgetManager.updateAppWidget(appWidgetId, views); 

Nhưng nó cần thiết toàn bộ mã để giữ nút đăng ký như thế này:

Intent intent = new Intent(context, ServiceWidgetAction.class); 
    intent.setAction(Long.toString(System.currentTimeMillis())); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    PendingIntent pendingIntent = PendingIntent 
      .getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    RemoteViews views = new RemoteViews(context.getPackageName(), 
      R.layout.widget); 

    views.setOnClickPendingIntent(R.id.widgetButton, pendingIntent); 

    views.setTextViewText(
      R.id.widgetTextView, 
      "Some text"); 

    appWidgetManager.updateAppWidget(appWidgetId, views); 

dòng Vì vậy, phía dưới là bất cứ khi nào bạn cập nhật một widget từ bên trong ứng dụng của bạn, hãy đảm bảo nó trông giống như mã trong chính tiện ích con. Đừng để bất cứ điều gì ra ngoài.

+0

Cảm ơn bạn. Trong trường hợp của tôi, phương thức duy nhất luôn cập nhật tiện ích có thể ném ngoại lệ trong một số trường hợp và một phần của mã sẽ không thực thi. – Alireza

+0

đây là vàng, chờ đợi không - bitcoin giá trị của nó trả lời - 10x mate – gor

0

Bạn đã cài đặt tiện ích của mình vào thẻ SD chưa?

Google khuyên bạn nên cài đặt tất cả các loại ứng dụng tiện ích, báo thức và người nhận vào bộ nhớ trong, do sự cố đồng bộ hóa hệ thống như thế này.

Có lẽ không phải là giải pháp, nhưng một "phải kiểm tra";)

android:installLocation="internalOnly" 
+0

Tôi không nghĩ về điều đó vì tôi đã kích hoạt ứng dụng cho SD tuy nhiên tôi vừa kiểm tra nó và ứng dụng đã được cài đặt vào bộ nhớ trong. Cảm ơn cho đầu vào mặc dù! –

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