关于调用Appwidget的一点事
2014-01-11 13:36
337 查看
参考:
/article/9356666.html
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
/article/9356666.html
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
相关文章推荐
- 关于RemoteView的一点愚见(RemoteView在AppWidget中的工作流程)
- 关于 App Widget Configuration Activity返回值调用的问题。
- 关于MIUI6下使用Widget调用Toast的一个问题
- Android App Widget中如何调用RemoteView中的函数
- 关于父类子类构造方法调用的一点认识
- 关于函数调用和尾递归的一点认识
- 关于使用widget的getAppWidgetIds方法返回空数组的解决方法
- 关于iPhone App的 Memory warning的一点东西
- 关于尾部调用,我的一点贡献
- iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
- iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
- 关于调用约定(cdecl、fastcall、、thiscall) 的一点知识
- iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
- 关于调用WritePrivateProfileString函数的一点失败经历
- 关于 AppWidget 动态更新:RemoteViews 更新缓慢&内存溢出
- 关于appwidget之天气小控件服务器是中国天气网
- 关于函数调用和尾递归的一点认识
- 关于iPhone App的 Memory warning的一点东西
- 关于“跨语言调用”和“CLS(公共语言规范)”的一点体会(转)
- 关于移动应用APP数据安全的一点见解