package com.stone.ui;import static android.util.Log.d;import android.app.Activity;import android.appwidget.AppWidgetHost;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProviderInfo;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnLongClickListener;import android.widget.FrameLayout;import android.widget.FrameLayout.LayoutParams;/** * 在activity中,长按,弹出widget选择界面, * 选择的widget有配置就先弹出, * 创建widget的view 将view加载到 activity中 */public class AddWidgetActivity extends Activity {private AppWidgetHost mAppWidgetHost;private AppWidgetManager mAppWidgetManager;private FrameLayout frameLayout;private static final int REQUEST_PICK_APPWIDGET = 1;private static final int REQUEST_CREATE_APPWIDGET = 2;private static final int APPWIDGET_HOST_ID = 0x100;//用于标识private static final String EXTRA_CUSTOM_WIDGET = "custom_widget";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                mAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext());        mAppWidgetHost = new AppWidgetHost(getApplicationContext(), APPWIDGET_HOST_ID);        //开始监听widget的变化        mAppWidgetHost.startListening();                frameLayout = new FrameLayout(this);        frameLayout.setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {showWidgetChooser();return true;}});        setContentView(frameLayout);    }        @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (resultCode == RESULT_OK) {    switch (requestCode) {    case REQUEST_PICK_APPWIDGET:                addAppWidget(data);                break;            case REQUEST_CREATE_APPWIDGET:                completeAddAppWidget(data);                break;    }    } else if (requestCode == REQUEST_PICK_APPWIDGET &&                resultCode == RESULT_CANCELED && data != null) {            // Clean up the appWidgetId if we canceled            int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);            if (appWidgetId != -1) {                mAppWidgetHost.deleteAppWidgetId(appWidgetId);            }        }    }        /**     * 选中了某个widget之后,根据是否有配置来决定直接添加还是弹出配置activity     * @param data     */    private void addAppWidget(Intent data) {        int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);        String customWidget = data.getStringExtra(EXTRA_CUSTOM_WIDGET);        d("addAppWidget", "data:"+ customWidget);        if ("search_widget".equals(customWidget)) {        //这里直接将search_widget删掉了            mAppWidgetHost.deleteAppWidgetId(appWidgetId);        } else {            AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId);                        d("addAppWidget", "configure:"+ appWidget.configure);            if (appWidget.configure != null) {            //有配置,弹出配置                Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);                intent.setComponent(appWidget.configure);                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);                startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);            } else {            //没有配置,直接添加            completeAddAppWidget(data);            }        }    }        /**     * 请求添加一个新的widget:用于选取系统中的widget     */    private void showWidgetChooser() {    int appWidgetId = mAppWidgetHost.allocateAppWidgetId();        Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);        pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);        startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);    }            /**     * 添加widget     * @param data     */    private void completeAddAppWidget(Intent data) {        Bundle extras = data.getExtras();        int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);        d("completeAddAppWidget", "dumping extras content="+extras.toString());        d("completeAddAppWidget", "appWidgetId:"+ appWidgetId);        AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);                View hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo);        frameLayout.setLayoutParams(new LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, appWidgetInfo.minHeight));        frameLayout.addView(hostView);     }}


参考:

http://chroya.iteye.com/blog/825407

更多相关文章

  1. Android(安卓)P SystemUI添加VoWiFi Tile
  2. Android动态添加删除recycleview并动态保存recycleview中的的数
  3. Android(安卓)常用的ui(单选框 多选框 下拉列表框 拖动条)
  4. Android(安卓)打包出错 failed for task ':app:lintVitalRelease
  5. Android(安卓)问题集合
  6. android实现拨打电话
  7. android string.xml中添加特殊字符
  8. Android(安卓)原生SQLite数据库操作实战
  9. 高德地图Android,绘制自定义定位蓝点、marker、面

随机推荐

  1. Android以及ios相关的测试 心得
  2. 蜂窝教育:Android影响在扩大,现在需把握先
  3. android 4.2.1 一种高效log打开方式
  4. 01 Android应用的构成 四大组件 Activity
  5. Android设备唯一码的获取
  6. Lenovo LePhone S2 不僅運行 Android,也將
  7. android View类详解。
  8. Google 内部演示文稿建议让部分合作商可
  9. Android实战技巧之四十五:复用原有C代码的
  10. AMS 深入了解(一、进程管理)(and5.1)