App wediget实例

直接上代码:

步骤:

01.先创建一个类继承AppWidgetProvider

package com.senk.appwidget;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;

public class ExampleAppwidgetProvider extends AppWidgetProvider
{

    /**
     *  当一个App Wediget实例被删除时,会调用该方法
     */
    @Override
    public void onDeleted(Context context, int[] appWidgetIds)
    {
        super.onDeleted(context, appWidgetIds);
        Log.v("tag", "onDeleted");
    }

    /**
     * 当最后一个App Wediget实例被删除后,会调用该方法
     */
    @Override
    public void onDisabled(Context context)
    {
        super.onDisabled(context);
        Log.v("tag", "onDisabled");
    }

    /**
     * 当一个App Widget的实例第一次被创建时,会调用该方法
     */
    @Override
    public void onEnabled(Context context)
    {
        super.onEnabled(context);
        Log.v("tag", "onEnabled");
    }

    /**
     * 接受广播事件
     */
    @Override
    public void onReceive(Context context, Intent intent)
    {
        super.onReceive(context, intent);
        Log.v("tag", "onReceive");
    }

    /**
     * 在大道指定的更新时间之后或者当用户向桌面添加App Widget时回调用该方法
     */
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
    {
        // appWidgetIds表示每创建一个appwiget就为她分配一个ID
        for (int i = 0; i < appWidgetIds.length; i++)
        {
            Log.v("tag", appWidgetIds[i]+"");
            // 创建一个intent对象
            Intent intent = new Intent(context,OtherActivity.class);
            // 创建一个PandingIntent
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            // RemoteViews代表的是我们创建的所有的appwidget的控件
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
            // 为按钮绑定处理器
            // 第一个参数用来指定绑定处理器的控件的  id
            // 第二个参数用来指定当事件发生时,哪个PendingIntent将会被执行
            remoteViews.setOnClickPendingIntent(R.id.widgetButtonId, pendingIntent);
            // 更新AppWidget
            // 第一个参数用于指定被更新Appwidget的ID
            // 第二个参数用户指定被更新RemoteViews对象
            appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
        }
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

}

02.在res/layout文件夹下创建一个Appwediget布局的xml文件:我这里建的是名为example_appwidget.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/widgetTextId"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="firstWidgetText"
        android:background="#000000"/>
    <Button 
        android:id="@+id/widgetButtonId"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="测试按钮"/>
</LinearLayout>

03.定义AppWidgetProviderInfo:我这里在res/xml文件夹当中定义一个名为example_appwidget_info.xmld的文件:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/example_appwidget">
</appwidget-provider>

04.最后在AndroidManifest.xml中添加如下:注意红色<receiver>标签部分

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

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

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity" android:label="这是从屏幕上的widget跳转过来的页面"/>
        <receiver android:name="ExampleAppwidgetProvider">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/example_appwidget_info" />
        </receiver>
    </application>
</manifest>

05.最后,为widget上的按钮添加跳转的页面,即点击widget上的一个按钮,就跳转到这个页面,我这里建的是一个名为OtherActivity的类
这个页面里面什么也没有,仅仅做下演示看下效果

package com.senk.appwidget;

import android.app.Activity;

public class OtherActivity extends Activity
{

}

MainActivity.java中也是什么也没有,因为这里暂时用不着,我们重点在于看widget的效果

package com.senk.appwidget;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

同样main.xml中也是什么也没加

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
</LinearLayout>

06.项目的目录结构:

07.效果图:

原文地址:https://www.cnblogs.com/jh5240/p/2465265.html