2010-10-28 45 views
5

Tôi có một ứng dụng Android hiện có. tôi đã thêm một widget đơn giản để nó sử dụng như sau:Widget Android trong trình mô phỏng

  • cập nhật biểu hiện của tôi với một khối <receiver> cung cấp thông tin về thực hiện AppWidgetProvider tôi
  • thêm một file xml mới trong res/xml với một yếu tố <appwidget-provider> có chứa chiều cao/chiều rộng/updatePeriod/initialLayout/biểu tượng/nhãn thuộc tính
  • thêm một bố cục mặc định đơn giản với một ImageViewTextView
  • thực hiện AppWidgetProvider tôi

Khi tôi xây dựng và triển khai điều này cho trình mô phỏng, Widget của tôi không hiển thị trong danh sách tiện ích con. Tôi có thiếu một số bước để 'cài đặt' widget? Tôi có cần phải làm bất cứ điều gì đặc biệt để làm cho nó xuất hiện trong trình giả lập không?

EDIT: Đây là những gì thu manifest của tôi trông giống như:

<receiver android:name=".MyAppWidgetProvider" 
      android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
       android:resource="@xml/my_appwidget_info" /> 
</receiver> 

và đây là những gì my_appwidget_info.xml của tôi trông giống như:

<?xml version="1.0" encoding="UTF-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:icon="@drawable/ic_logo" 
    android:label="MySampleApp" 
    android:minWidth="294dp" 
    android:minHeight="72dp" 
    android:updatePeriodMillis="86400000" 
    android:initialLayout="@layout/my_app_widget" > 
</appwidget-provider> 
+0

Liệu nó làm việc trên một thiết bị thực tế? – EboMike

+0

Không biết. Tôi vẫn đang chờ thiết bị hiển thị. – psychotik

+1

Bạn đã không cài đặt ứng dụng vào thẻ SD ảo (ảo) của mình bằng bất kỳ cơ hội nào? Vị trí cài đặt trong tệp kê khai của bạn là gì? – EboMike

Trả lời

6

Liệu thẻ nhận của bạn trong manifest có mục đích đúng đắn -filter và meta-data? Nó sẽ giống như ví dụ trong documentation:

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

Người nhận cần cả những miếng để được công nhận là một widget ứng dụng.

Chỉnh sửa: Thẻ <receiver> cũng cần phải được đặt bên trong các thẻ <application>.

+0

Cảm ơn, vâng. – psychotik

+0

Hmm, có vẻ như bạn có mọi thứ cần thiết để hiển thị trong danh sách tiện ích. Tôi đã sao chép mã bạn đã cung cấp vào một dự án mới và tiện ích hiển thị trong danh sách cho tôi. Bạn không gặp phải bất kỳ lỗi nào khi triển khai? – tinja

+0

không, không có lỗi. Tôi thậm chí đã cố gỡ cài đặt ứng dụng của mình và cài đặt lại. Các đề xuất khác? – psychotik

1

Nếu ứng dụng của bạn được cài đặt trên thẻ SD, tất cả các tiện ích của bạn sẽ lặng lẽ từ chối hiển thị trong danh sách. (Các tài liệu làm cho nó rõ ràng rằng bạn không thể có widget nếu bạn đang ở trên lưu trữ bên ngoài).

Bạn có thể chuyển đến cài đặt trong màn hình chính, đi tới Ứng dụng và chuyển đến ứng dụng của bạn. Nếu nó cung cấp cho bạn để "Di chuyển sang điện thoại", sau đó nó là trên thẻ SD. Bạn có thể đặt vị trí cài đặt thành internalOnly để ngăn không cho nó đi vào thẻ SD.

Nếu bạn cho phép cài đặt trên thẻ SD (vì người dùng thường sẽ yêu cầu điều đó), họ cần phải rõ ràng rằng họ không thể có tiện ích con trong trường hợp đó. Nếu ứng dụng ở trên thẻ SD và bạn muốn sử dụng tiện ích, trước tiên bạn phải di chuyển ứng dụng trở lại bộ nhớ trong và sau đó đặt lại điện thoại (!).

+0

Đó là thông tin tốt - cảm ơn. Nhưng trong giả lập của tôi, tôi đang cài đặt vào bộ nhớ chính. Tôi thậm chí đã chạy điều này trên giả lập mà không cần bất kỳ thẻ SD. – psychotik

-1

Tôi gặp sự cố tương tự. Hóa ra tôi vô tình có hai tệp siêu dữ liệu siêu dữ liệu trong hai thư mục khác nhau, thư mục "bố cục" của tôi và thư mục "xml" của tôi. Nó đã được tìm kiếm (trống) tài nguyên trong "bố trí" đầu tiên, và sử dụng cho siêu dữ liệu của nó.

Đó là một sai lầm ngu ngốc, nhưng hãy chắc chắn rằng bạn chỉ có một tệp xml của tên đó được trỏ đến trong thẻ siêu dữ liệu của người nhận. Ngoài ra tôi nghĩ rằng nó phải luôn luôn nằm trong thư mục xml.

-1

Tôi gặp vấn đề tương tự. Và vấn đề của tôi là tôi có /layout/main.xml tệp khi tôi xóa nó, tiện ích xuất hiện!

Nó nghe như @ubzack câu trả lời nhưng tôi nghĩ anh ấy nói về cái gì khác [cùng tên file xml]

1

tôi đã cùng một vấn đề là tốt. Một vài điều cần kiểm tra có thể ngăn nó hiển thị trên các mô hình khác nhau.

1) Phải có minHeight và minWidth được đặt trên AppWidget-Provider trong xml, nếu bạn xóa một trong số đó và khởi chạy trong trình mô phỏng, tiện ích của bạn sẽ biến mất. 2) Một số mô hình có vấn đề nếu bạn không cung cấp xem trướcHình ảnh trong AppWidget-Provider 3) Một số mô hình có thể gặp sự cố nếu bạn cài đặt trên Thẻ SD thay vì trong nội bộ, mặc dù tôi vẫn muốn cài đặt trên thẻ SD. 4) Một số mô hình cần có Hoạt động với Chính và Trình khởi chạy được xác định ngay cả khi bạn không có ý định sử dụng bất kỳ Hoạt động nào. (Bạn có thể chỉ cần thực hiện một giả mà nói 'đây là một ứng dụng widget chỉ' 5) Bạn phải có thiết lập tệp kê khai của bạn một cách chính xác như thể hiện trong câu trả lời của TinJa.

Tôi đã chiến đấu thông qua điều này trong một thời gian trước khi cuối cùng nó hiển thị trong tất cả các mô hình và trình mô phỏng, vì vậy hãy kiên nhẫn, đảm bảo bạn không thiếu gì và đặt các giá trị cần có. Hãy nhớ một số điện thoại lưu vào bộ nhớ cache Danh sách Widget và có thể không cập nhật cho đến khi bạn đã khởi chạy Hoạt động đầu tiên hoặc Khởi động lại điện thoại.

Hy vọng điều đó sẽ hữu ích.

Sam

0

Tôi đã gặp vấn đề tương tự rồi cuối cùng tôi cũng tìm ra. Thông thường khi bạn mô phỏng một ứng dụng, nó có một hoạt động để tải. Đối với ứng dụng chỉ dành cho tiện ích, điều đó không đúng, nhưng IDE vẫn cho rằng bạn đang cố gắng khởi chạy một hoạt động.

Để thay đổi điều này đi đến bạn Build Tùy chọn

Example

sau đó thay đổi Launch Tùy chọn để Không có gì

Example

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