关于调用Appwidget的一点事

参考:

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







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值