Android Widget実践---EverydayTips開発

7442 ワード

アプリはもう終わったので、ここでダウンロードしましょう
http://static.apk.hiapk.com/html/2012/05/611477.html?module=256&info=z2vlZQBO5VM%3D
忙しくて手の下の事が暇で无事にWidgetの使い方を勉强して、耻ずかしくて、こんなに长くWidgetをしたことがないものを开発して、それではゼロから后の人に参考にすることができます
まず私が開発するものです:EveryDayTipsはandroidが持っているTipsに似ていますが、私たちのアプリケーションは名言警句を表示するためのもので、注意程度でしょう.基本的な機能:
デスクトップにwidget形式で名言警句を表示
ユーザーはwidgetを更新する時間をカスタマイズできます.
Widgetが更新されるとnotificationでステータスバーに送信されます
widgetをクリックするとActivityやダイアログボックスが開き、この警告文をコピーして共有することができます.
初歩的な論理とインタフェース
AndroidWidget实践 --- EverydayTips开发_第1张图片
では、私たちは書き始めました.
まずは新築工事
次にManifestの構成
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.su.tipeveryday"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".TipEveryDayActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
			    <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".TipEveryDayWidget" 
            android:label="AAAAAAAATip">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_config" /><!--    widget     ,              copy -->
        </receiver>
     
    </application>

</manifest>

実はwidgetはreceiverで、配置するなら直接のこの部分をコピーすればokです.プロファイルを変更して
xmlの下のプロファイルを見てみましょう
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:configure="com.su.tipeveryday.TipEveryDayActivity"
    android:initialLayout="@layout/widget_layout"
    android:minHeight="72dp"
    android:minWidth="280dp"
    android:updatePeriodMillis="86400000" >
</appwidget-provider>
<!-- android:initialLayout widget     
 	 android:updatePeriodMillis="86400000"       
 	      -->

レイアウトファイルwidget_を見てみましょうlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textViewWidget"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/widget"
        android:text="     ,     " />

</LinearLayout>
とactivityのレイアウトはほとんど違いません
リソースファイルをdrawableに保存した後、Activityのコードを作成します.
実はフレームワークもこれに基づいて書けばいいのです
package com.su.tipeveryday;  
  
import android.app.Activity;  
import android.appwidget.AppWidgetManager;  
import android.content.Intent;  
import android.os.Bundle;  
import android.util.Log;  
  
public class TipEveryDayActivity extends Activity {  
      
    int mAppWidgetId;  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
          
        Log.i("myLog"," on WidgetConf ... ");  
          
        setResult(RESULT_CANCELED);  
          
        // Find the widget id from the intent.  
        Intent intent = getIntent();  
        Bundle extras = intent.getExtras();  
        if (extras != null) {  
            mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,  
                    AppWidgetManager.INVALID_APPWIDGET_ID);  
            Log.i("TTTTT", mAppWidgetId+"");//         widgetID,               19,      ID?
        }  
  
        // If they gave us an intent without the widget id, just bail.  
        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {  
            finish();  
        }  
          
        // return OK  
        Intent resultValue = new Intent();  
        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,  
                mAppWidgetId);  
          
        setResult(RESULT_OK, resultValue);  
        finish();  
    }  
}  

運行後はtextViewに「若くて努力しないと悲しくなる」と表示されます
次はwidgetのコードの作成です
package com.su.tipeveryday;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;

public class TipEveryDayWidget extends AppWidgetProvider {

	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		// TODO Auto-generated method stub
		super.onDeleted(context, appWidgetIds);
	}

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {//widget       
		// TODO Auto-generated method stub
		super.onUpdate(context, appWidgetManager, appWidgetIds);

		final int N = appWidgetIds.length;
		Log.d("app", "onUpdate--->Ids===" + String.valueOf(N));
		for (int i = 0; i < N; i++) {//       widget      (   id    )
			int appWidgetId = appWidgetIds[i];
			updateAppWidget(context, appWidgetManager, appWidgetId);//  widget   
		}

	}

	private void updateAppWidget(Context context,AppWidgetManager appWidgetManager, int appWidgetId) {
			String tip = Tips.getTips();// Tips.java     
			RemoteViews views = new RemoteViews(context.getPackageName(),
				R.layout.widget_layout);
			views.setTextViewText(R.id.textViewWidget, tip);
			appWidgetManager.updateAppWidget(appWidgetId, views);// widget     

	}

}

Tips.JAvaのサービスは実現していません:ただ1つの文を返します
package com.su.tipeveryday;

public class Tips {
	public static String getTips() {
		return "       ,       ";
	}
}

これで私たちの応用は宝剣という言葉を示しました
AndroidWidget实践 --- EverydayTips开发_第2张图片
後で知りたいなら先にご飯を食べます.