2013-02-23 42 views
37

Tôi đã thực hiện một ứng dụng android android lưu trữ ngày có tên và số điện thoại của người đó.Cách tạo ứng dụng android với tiện ích ứng dụng trong ứng dụng đơn

Bây giờ tôi phải phát triển một tiện ích cho ứng dụng này để hiển thị ngày hôm nay (ngày, tên người và số điện thoại) bằng nút.

Yêu cầu:

  1. ứng dụng đơn với ứng dụng và widget.
  2. Khi tôi nhấp vào nút có trong tiện ích con, ứng dụng sẽ bắt đầu ứng dụng của tôi.
  3. dữ liệu Widget nên luôn luôn đồng bộ với ứng dụng của tôi - khi hiện nay ngày (người 5 và ứng dụng thêm một người hơn 5 thì Widget hiển thị 10 dữ liệu người)
  4. Làm thế nào tôi có thể thiết kế widget này? Bất kỳ hướng dẫn nào? Tôi phải sử dụng ScrollView ngang.

Tôi đã thực hiện bản trình diễn tiện ích đơn giản nhưng tôi không biết cách đồng bộ hóa nó với ứng dụng của mình.

Hãy chia sẻ kinh nghiệm của bạn và đưa ra một số ý tưởng về tiện ích và ứng dụng của tôi.

+0

Tôi tìm kiếm toàn bộ ngày để giải quyết yêu cầu đầu tiên và thứ hai và thực hiện. – Harshid

+4

http://www.vogella.com/articles/AndroidWidgets/article.html xem liên kết này – Roadies

Trả lời

8

Tôi đang tìm kiếm vài ngày tôi nhận được giải pháp. Vì vậy, tôi đang chia sẻ ý tưởng của tôi.

Trang web này rất hữu ích đối với tôi.

http://kasperholtze.com/android/how-to-make-a-simple-android-widget/

Tôi đã thực hiện một số thay đổi và thực hiện công việc của mình.

giải pháp Yêu cầu:

1. Hãy nhận và đưa vào sự cho phép biểu hiện như thế này.

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

2. Trong bên cạnh tôi đòi hỏi đầu TextView nhấp chuột để có thể làm cho sử dụng id TextView trong onUpdate().

remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_lay); 

    Intent intent = new Intent(context, TestActivity.class); 
    intent.setAction("callActivity"); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
    remoteViews.setOnClickPendingIntent(R.id.widget_textview, pendingIntent); 
    appWidgetManager.updateAppWidget(new ComponentName(context,WatchWidget.class), remoteViews); 

3. Tôi muốn gọi cơ sở dữ liệu và lấy hồ sơ và hiển thị nó. Bây giờ đặt câu hỏi về cập nhật?

Vì vậy, tôi đã sử dụng lớp bộ đếm thời gian và chạy mỗi 1000 giây vì tiện ích con luôn cập nhật 30 phút (có thể).

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

    this.appWidgetManager = appWidgetManager; 
    try { 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager,appWidgetIds), 1, 1000); 

    } catch (Exception e) { 
     System.out.println("Exception:"); 
    } 
    updateSwitch1(context, appWidgetManager, appWidgetIds[0]); 

} 

Nếu có bất kỳ thắc mắc nào sau đó đưa nhận xét và cảm ơn tất cả những người đã hỗ trợ đầy đủ để làm cho câu trả lời này hữu ích.

+0

hai i đăng một câu hỏi cho liên kết này, vui lòng giúp tôi http://stackoverflow.com/questions/18376263/automatically-update-widget -in-the-home-screen-khi-i-make-modify-in-my-ap – Satheesh

+0

Liên kết hướng dẫn cung cấp cho 500 Lỗi Máy chủ Nội bộ. Liên kết – Enoobong

+1

không hoạt động – baxx

36

Tạo và cấu hình phụ tùng

Để đăng ký một widget bạn tạo một BroadcastReceiver với một bộ lọc ý định cho hành động android.appwidget.action.APPWIDGET_UPDATE.

<receiver 
     android:icon="@drawable/icon" 
     android:label="Example Widget" 
     android:name="MyWidgetProvider" > 
     <intent-filter > 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 

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

Bạn cũng có thể chỉ định siêu dữ liệu cho các widget thông qua android:. Name = "android.appwidget.provider thuộc tính Các tập tin cấu hình gọi của thành viên này meta-data chứa các cài đặt cấu hình cho Nếu chứa ví dụ giao diện cập nhật, kích thước và bố cục ban đầu của tiện ích

Tạo tệp myshape.xml mới trong thư mục/res/drawable. Tệp này sẽ xác định nền mà chúng tôi sử dụng trong tiện ích của bạn .

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle" > 

    <stroke 
     android:width="2dp" 
     android:color="#FFFFFFFF" /> 

    <gradient 
     android:angle="225" 
     android:endColor="#DD2ECCFA" 
     android:startColor="#DD000000" /> 

    <corners 
     android:bottomLeftRadius="7dp" 
     android:bottomRightRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp" /> 

</shape> 

Xác định tệp widget_layout.xml sau trong thư mục res/layout.

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="8dip" 
      android:background="@drawable/myshape" > 

     <TextView 
      android:id="@+id/update" 
      style="@android:style/TextAppearance.Medium" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_gravity="center" 
      android:gravity="center_horizontal|center_vertical" 
      android:layout_margin="4dip" 
      android:text="Static Text" > 
     </TextView> 

    </LinearLayout> 

giờ hãy tạo lớp học.

public class MyWidgetProvider extends AppWidgetProvider { 

    private static final String ACTION_CLICK = "ACTION_CLICK"; 

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

    // Get all ids 
    ComponentName thisWidget = new ComponentName(context, 
     MyWidgetProvider.class); 
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
    for (int widgetId : allWidgetIds) { 
     // Create some random data 
     int number = (new Random().nextInt(100)); 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
      R.layout.widget_layout); 
     Log.w("WidgetExample", String.valueOf(number)); 
     // Set the text 
     remoteViews.setTextViewText(R.id.update, String.valueOf(number)); 

     // Register an onClickListener 
     Intent intent = new Intent(context, MyWidgetProvider.class); 

     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
      0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent); 
     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 
    } 
+0

Đây là một số cách hữu ích đối với tôi nhờ @Maya mAku – Harshid

+6

bạn quên tệp xml/widget_info bị bỏ qua, chẳng hạn như: ' ' – Choletski

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