android widget 自动添加,Android Widget 小部件(三) 在Activity中添加Widget

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() {

@Override

public 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

原文:http://blog.csdn.net/jjwwmlp456/article/details/38468785

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值