2012-03-16 40 views
6

Tôi đã được sau nhiều Widget Tutorials như this onethis oneOnUpdate KHÔNG BAO GIỜ gọi - Android Widget

Tôi đã cố gắng thích nghi với mã của họ để mục đích của tôi, và tôi đã cố gắng thẳng lên bản sao dán. Dường như không có vấn đề gì tôi làm, widget KHÔNG BAO GIỜ của tôi được cập nhật. Khi nó được đặt trên màn hình chủ, văn bản vẫn là Văn bản tĩnh được tạo ra. Tất cả những gì tôi cần ứng dụng này cần làm là cập nhật 4 TextViews sẽ được chứa trong bố cục.

Mã bên dưới chủ yếu được sao chép từ một trong các hướng dẫn. Tôi đã thử gỡ lỗi các phương pháp onUpdate, tuy nhiên điểm break dường như không bao giờ được nhấn.

Mọi trợ giúp sẽ được đánh giá cao.

EDIT: Tôi hoàn nguyên về phiên bản đơn giản hơn của tiện ích này mà tôi đã thử trước đó trong nỗ lực của mình và thay thế mã bên dưới bằng mã cho tiện ích đơn giản hơn. Tôi đã thực hiện các thay đổi được đề xuất bởi CommonsWare đối với tệp kê khai của tôi. Thật không may vấn đề vẫn còn.

tập tin java chính của tôi trông giống như vậy:

public class NetStatWidget extends AppWidgetProvider 
{ 

public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds) 
{ 
    ComponentName thisWidget = new ComponentName(context, NetStatWidget.class); 
    int[] widgetId = manager.getAppWidgetIds(thisWidget); 

    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget); 
    remoteView.setTextViewText(R.id.textView0, "Hello"); 
    manager.updateAppWidget(widgetId, remoteView); 
} 

} 

My Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.stat" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 


      <receiver android:name="NetStatWidget" > 
       <intent-filter> 
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
       </intent-filter> 
       <meta-data 
        android:name="android.appwidget.provider" 
        android:resource="@xml/providerinfo" /> 
      </receiver> 

    </application> 

</manifest> 

Và Provider Widget của tôi Thông tin:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/main" 
android:minWidth="146dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="10000"> 

Trả lời

7

manifest của bạn là sai rồi. Bạn đang tuyên bố rằng bạn có một lớp học network.widget.AppWidgetProvider và AFAIK, bạn thì không. Bạn có một lớp học có tên là network.widget.NetworkWidgetActivity. Bạn cần sử dụng rằng trong phần tử <receiver> của mình.

Ngoài ra:

  • Thay this.getApplicationContext()getApplicationContext() với this

  • Trừ khi bạn có kế hoạch thực hiện công việc nghiêm trọng hơn trong dịch vụ (cơ sở dữ liệu I/O, mạng I/O, vv), hãy xem xét việc chuyển tất cả logic đó thành onUpdate() và loại bỏ dịch vụ vì nó không thực sự mua cho bạn nhiều ở đây (và nếu bạn sẽ giữ dịch vụ, chuyển sang IntentService và loại bỏ stopSelf() kể từ đó là xử lý cho bạn)

  • Trong khi bạn đang yêu cầu cập nhật 10 giây, tối thiểu có hiệu quả updatePeriodMillis là 30 phút - chỉ cần giữ ý nghĩ đó trong khi bạn đang gỡ lỗi

  • int[] widgetId có vẻ là chưa sử dụng trong NetworkWidgetActivity

  • onStart() trong một Service đã không được dùng nữa trong một vài năm; sử dụng onStartCommand() thay vì

+0

Tôi đã thay đổi tệp kê khai theo đề xuất của bạn và vẫn gặp sự cố tương tự ...Tôi trở lại với một widget đơn giản hơn, tôi đã cố gắng vào đầu những nỗ lực của mình, thực hiện cùng một thay đổi và nó cũng có cùng một vấn đề. Tôi đã chỉnh sửa mã ở trên phản ánh mã đơn giản hơn. Bạn có thấy cùng một vấn đề không? – Jodron

+0

@Jodron: Không, những gì bạn có ở đó sẽ hoạt động trên Android 3.0 trở xuống. Android 3.1 trở lên, bạn cần có hoạt động để đi với tiện ích ứng dụng của mình - tiện ích ứng dụng của bạn sẽ không nhận được chương trình phát sóng cho đến khi người dùng điều hành hoạt động. Thư mục này chứa hai mẫu widget ứng dụng khác, cả hai đều hoạt động: https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget – CommonsWare

+0

Điều đó thật lạ. Im chạy nó trên 2,3, và nó vẫn sẽ không cập nhật văn bản. Tôi có sai khi nghĩ rằng ngay sau khi widget được đặt "textView0" nên đọc "Hello"? Cảm ơn các ví dụ, Ill xem xét các ví dụ đó và xem tôi có thể hình dung ra được không. Tôi nghĩ rằng tôi có thể ở trên đầu của tôi và chỉ nên làm cho nó một ứng dụng thường xuyên. – Jodron

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