zoukankan      html  css  js  c++  java
  • 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.效果图:

  • 相关阅读:
    Kprobes—insight into the Linux kernel—replace kernel function with module
    Go将统治下一个十年
    linux—网络仿真开源软件—network simulator—ns
    Serval Project——Android
    CentOS7—Firefox—截图工具—fireshot插件
    Wi-Fi Direct技术
    国产CPU迷局 龙芯该如何参与市场竞争
    《深入理解Android:Wi-Fi,NFC和GPS》—android源码下载
    wifi direct—深入理解Wi-Fi P2P
    c语言学习基础:[1]开发工具介绍
  • 原文地址:https://www.cnblogs.com/jh5240/p/2465265.html
Copyright © 2011-2022 走看看