参考:
http://blog.csdn.net/ralphsage/article/details/6822286
http://www.eoeandroid.com/thread-51794-1-1.html
1. 首先是关于java.lang.SecurityException:User 10032 does not have android.permission.BIND_APPWIDGET 的问题,以上两个链接有解决办法;
2. 主干代码
public class AppwidgetTest extends Activity {
private static String TAG = "AppwidgetTest";
private AppWidgetManager m_appwidgetmgr = null;
private AppWidgetHost m_appWidgetHost = null;
private static int HOST_ID = 1048;
private ListView m_list = null;
private LinearLayout m_appContainer = null;
private List<AppWidgetProviderInfo> m_Providers = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Init();
}
void Init() {
m_appContainer = (LinearLayout)findViewById(R.id.appContainer);
m_list = (ListView)findViewById(R.id.ListView01);
m_list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
AppWidgetProviderInfo info = m_Providers.get((int) id);
Log.e(TAG, "Label ==================== " + info.label);
Log.e(TAG, " ===================info.provider===" + info.provider);
if (info.provider == null) {
return;
}
//add
int appWidgetId = m_appWidgetHost.allocateAppWidgetId();
Log.e(TAG, "appWidgetId ==================== " + appWidgetId);
m_appwidgetmgr.bindAppWidgetId(appWidgetId, info.provider);
// m_appwidgetmgr.bindAppWidgetId(appWidgetId, new ComponentName("cn.roco.widget.clock",
// "cn.roco.widget.clock.TimeWidgetProvider"));
Log.e(TAG, "=================================xxxxxxxxxx");
AppWidgetProviderInfo appWidget = m_appwidgetmgr.getAppWidgetInfo(appWidgetId);
Log.e(TAG, "================configure=================appWidget=" + appWidget);
if (appWidget == null){
Log.e(TAG, "================configure=================NULL");
return;
}
else {
Log.e(TAG, "======================appWidget.configure=" + appWidget.configure);
Log.e(TAG, "======================appWidget.provider=" + appWidget.provider);
}
if (appWidget != null) {
Log.e(TAG, "minHeight=======" + appWidget.minHeight + ", minWidth===" + appWidget.minWidth);
}
else {
Log.e(TAG, "=================================NULL");
}
if (true) {
AppWidgetHostView hostView = GetHostView(appWidgetId, appWidget);
if (hostView != null) {
hostView.setVisibility(View.VISIBLE);
if (m_appContainer.getChildCount() > 0) {
m_appContainer.removeAllViews();
}
m_appContainer.addView(hostView);
}
}
}
});
m_appWidgetHost = new AppWidgetHost(this, HOST_ID);
m_appWidgetHost.startListening();
m_appwidgetmgr = AppWidgetManager.getInstance(this);
m_Providers = m_appwidgetmgr.getInstalledProviders();
List<String> labels = new ArrayList<String>();
for (int i = 0; i < m_Providers.size(); i++) {
AppWidgetProviderInfo info = m_Providers.get(i);
Log.e(TAG, "Label ==================== " + info.label);
labels.add(info.label);
}
if (m_Providers.size() > 0) {
ListAdapter adapter = new ArrayAdapter<String>(this, R.layout.listitem, labels);
m_list.setAdapter(adapter);
}
}
private AppWidgetHostView GetHostView(int appwidgetId, AppWidgetProviderInfo appwidgetInfo) {
AppWidgetHostView hostView = m_appWidgetHost.createView(this, appwidgetId, appwidgetInfo);
if (hostView == null) {
Log.e(TAG, "===============GetHostView==================NULL");
return null;
}
hostView.setAppWidget(appwidgetId, appwidgetInfo);
return hostView;
}
}
源代码下载地址:http://download.csdn.net/detail/suchto/6836937