zoukankan      html  css  js  c++  java
  • Android Widget桌面组件创建

    package com.king.android.speical;
    import com.king.android.R;
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.widget.RemoteViews;
    /**
     * 描述:创建widget类
     * 作者:Andy.Liu
     * 时间: 2012-7-17  上午07:01:39
     **/
    public class ExampleAppWidgetProvider extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    for(int i=0;i<N;i++){
    int appWidgetId = appWidgetIds[i];
    String titlePrefix = WidgetActivity.loadTitlePref(context, appWidgetId);
    updateAppWidget(context, appWidgetManager, appWidgetId, titlePrefix);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
    //当桌面组件删除时调用 
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
    //删除appWidget
    final int N = appWidgetIds.length;
    for(int i =0;i<N;i++){
    WidgetActivity.deleteTitlePref(context, appWidgetIds[i]);
    }
    }
    //当AppWidtgetProvider提供的第一个组件删除时调用
    @Override
    public void onEnabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName("com.king.android.special", ".ExampleBroadCastReceiver"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    }
    //当AppWidtgetProvider提供的最后一个组件删除时调用
    @Override
    public void onDisabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName("com.king.android.special", ".ExampleBroadCastReceiver"), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    }
    // 更新
    static void updateAppWidget(Context context,AppWidgetManager appwidgetManager,int appWidgetId,String titlePrefix){
    //构建 RemoteViews 对象对桌面组件进行更新
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider);
    //更新文本内容,指定布局组件
    views.setTextViewText(R.id.appwidget_text, titlePrefix);
    //将RemoteViews更新传入到AppWidget进行更新
    appwidgetManager.updateAppWidget(appWidgetId, views);
    }
    }
    package com.king.android.speical;
    import java.util.ArrayList;
    import android.appwidget.AppWidgetManager;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    /**
     * 描述:创建广播类来接收的信息
     * 作者:Andy.Liu
     * 时间: 2012-7-17  上午07:03:30
     **/
    public class ExampleBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //通过BroadCastReceiver来更新AppWidget
    String action = intent.getAction();
    if(action.equals(Intent.ACTION_TIMEZONE_CHANGED)||action.equals(Intent.ACTION_TIME_CHANGED)){
    AppWidgetManager gm = AppWidgetManager.getInstance(context);
    ArrayList<Integer> appWidgetIds = new ArrayList<Integer>();
    ArrayList<String> texts = new ArrayList<String>();
    WidgetActivity.loadAllTitlePrefs(context, appWidgetIds, texts);
    // 更新所有AppWidget
    final int N = appWidgetIds.size();
    for(int i=0;i<N;i++){
    ExampleAppWidgetProvider.updateAppWidget(context,gm,appWidgetIds.get(i),texts.get(i));
    }
    }
    }
    }

     package com.king.android.speical;

    import java.util.ArrayList;
    import android.app.Activity;
    import android.appwidget.AppWidgetManager;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import com.king.android.R;
    public class WidgetActivity extends Activity
    {
    private static final String PREFS_NAME = "com.king.android.ExampleAppWidgetProvider";
    private static final String PREF_PREFIX_KEY = "prefix_";
    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    EditText mAppWidgetPrefix;
    public WidgetActivity()
    {
    super();
    }
    public void onCreate(Bundle icicle)
    {
    super.onCreate(icicle);
    setResult(RESULT_CANCELED);
    setContentView(R.layout.appwidget_configure);
    mAppWidgetPrefix = (EditText) findViewById(R.id.appwidget_prefix);
    findViewById(R.id.save_button).setOnClickListener(mOnClickListener);
    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null)
    {
    mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
    {
    finish();
    }
    mAppWidgetPrefix.setText(loadTitlePref(WidgetActivity.this, mAppWidgetId));
    }
    View.OnClickListener mOnClickListener = new View.OnClickListener() 
    {
    public void onClick(View v)
    {
    final Context context = WidgetActivity.this;
    String titlePrefix = mAppWidgetPrefix.getText().toString();
    saveTitlePref(context, mAppWidgetId, titlePrefix);
    //取得AppWidgetManager实例
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    //更新AppWidget
    ExampleAppWidgetProvider.updateAppWidget(context, appWidgetManager, mAppWidgetId, titlePrefix);
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();
    }
    };
    static void saveTitlePref(Context context, int appWidgetId, String text)
    {
    SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, 0).edit();
    prefs.putString(PREF_PREFIX_KEY + appWidgetId, text);
    prefs.commit();
    }
    static String loadTitlePref(Context context, int appWidgetId)
    {
    SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
    String prefix = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null);
    if (prefix != null)
    {
    return prefix;
    }
    else
    {
    return "xxxxxxxxxxxxxxxxx";
    }
    }
    static void deleteTitlePref(Context context, int appWidgetId)
    {
    }
    static void loadAllTitlePrefs(Context context, ArrayList<Integer> appWidgetIds, ArrayList<String> texts)
    {
    }
    }

     <?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="wrap_content"
        android:orientation="vertical"
        >
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />
        <EditText
            android:id="@+id/appwidget_prefix"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />
        <Button
            android:id="@+id/save_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@android:string/ok"
        />
    </LinearLayout>

     <?xml version="1.0" encoding="utf-8"?>

    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:minWidth="100dp"
        android:minHeight="50dp"
        android:updatePeriodMillis="86400000"
        android:initialLayout="@layout/appwidget_provider"/>

     <?xml version="1.0" encoding="utf-8"?>

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/appwidget_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
  • 相关阅读:
    xml解析
    File
    IO操作
    Json解析
    JNI字段描述符
    Android JNI get Context
    快速排序
    Android Scroller与computeScroll的调用机制关系
    Android 更新视图函数ondraw() 和dispatchdraw()的区别
    Android Studio 两个包里的类冲突
  • 原文地址:https://www.cnblogs.com/liuzenglong/p/2594564.html
Copyright © 2011-2022 走看看