执行方法的数组appWidgetIds中的 ids
公共无效onUpdate(上下文上下文,AppWidgetManager appWidgetManager,int [] appWidgetIds){
都属于我的应用程序吗?
如果是这样,那么我的 Android 的必杀技中会有一些应用程序小部件,因为如果我删除所有应用程序小部件,数组中仍然保留一些 id,这些 id 不会显示在我的主屏幕上。:-(
有没有办法删除所有小部件?
我正在开发一个由不再在公司工作的人编写的 Android 应用程序,并且不明白为 AppWidget 更新创建接收器的目的是什么。清单具有在应用程序启动时运行的主要活动。据我所知,appwidget 从未被使用过,它的代码与应用程序的其余部分是分开的。我不知道这是剩余的并且可以删除还是仍在使用。我发现的所有教程和示例都解释了如何实现这一点,但并不是真正解释为什么要这样做,尤其是在这种情况下。
清单文件中的代码:
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/ConnectTheme" >
<activity
android:name="com.globalcrossing.connect.ConferenceListView"
android:label="@string/listTitle" >
<intent-filter android:label="@string/app_name" >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.globalcrossing.connect.Preferences"
android:label="@string/set_preferences" >
</activity>
<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver
android:name="com.globalcrossing.connect.ConferenceWidget"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_provider" />
</receiver>
... more activities I understand, deleted for brevity
</application>
Run Code Online (Sandbox Code Playgroud) android broadcastreceiver android-manifest android-appwidget
我喜欢向我的列表视图的每个项目添加一个 onClick 侦听器,但我尝试过的一切都不起作用。
这是我的 RemoteViewsFactory:
public class MyRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
[...]
public RemoteViews getViewAt(int position) {
final RemoteViews remoteView = new RemoteViews(
context.getPackageName(), R.layout.widget_item);
[...]
final Intent activityIntent = new Intent(context, ListActivity.class);
activityIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
activityIntent.putExtra(AppWidgetManager.ACTION_APPWIDGET_PICK, position);
PendingIntent pI = PendingIntent.getActivity(
context, appWidgetId, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.item_frame, pI);
return remoteView;
}
}
Run Code Online (Sandbox Code Playgroud)
列表小部件.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" >
<include layout="@layout/picture_frame" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/picframe"
android:layout_margin="5dp"
android:gravity="center"
android:loopViews="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
列表项.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout …Run Code Online (Sandbox Code Playgroud) 我想要做的是,一旦AppWidget从用户的Android手机的主屏幕中删除,我想停止更新AppWidget的后台服务.
这是我正在使用的代码...不明白什么是错的?
@Override
public void onDeleted(Context context, int[] appWidgetIds){
Intent serviceIntent = new Intent(context, UpdateService.class);
context.stopService(serviceIntent);
super.onDeleted(context, appWidgetIds);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢您的帮助.
我搜索并搜索并搜索了这个!
所以我有一个应用程序小部件,它有一个配置活动,我可以在应用程序上按下按钮时打开.场景是:
该应用程序打开了.
使用主页按钮关闭应用程序.
选择添加我的小部件
我已经配置了小部件.
放在我的主屏幕上
然后使用窗口小部件上的按钮再次打开配置活动.
按回来取消新配置将把我带回应用程序.
按下后我想回家.
基本上我要问的是.如何在自己的任务/堆栈中启动配置活动?
我已经调查了意图过滤器,但我只是不太确定,或者它可能与它所在的包有关,或者它可能是不可能的!
我想这可能与我用来启动配置活动的意图有关
Intent configIntent = new Intent(this, Configuration.class);
configIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
remoteView.setOnClickPendingIntent(R.id.config, PendingIntent.getActivity(this, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT));
Run Code Online (Sandbox Code Playgroud)
也许是因为我用'this'作为上下文启动它,它总是在我的应用程序堆栈中启动...但是挂起的意图api是:PendingIntent API 1 "注意,活动将在现有活动的上下文之外启动"
所以,是的,我现在就停止说话,因为我最终会进入圈内!
编辑
所以android:launchMode="singleInstance"在清单中尝试过就像所说的那样.这有效但它会阻止'startActivityForResult'行为正常工作.(这是配置活动的全部原因)获取错误:
WARN/ActivityManager(59):活动作为新任务启动,因此取消活动结果.
所以仍然没有找到解决方案.
我正在寻找一种方法来定期动画/自动推进ListView应用程序小部件,就像使用StackView应用程序小部件一样.
例如,Android Market和YouTube小部件通过自动前进到集合中的下一个项目(在Honeycomb上)每20秒进行一次动画制作.
我在StackView Widget示例中看到他们对StackView小部件使用autoAdvanceViewId设置:
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="150dip"
android:minHeight="150dip"
android:updatePeriodMillis="3600000"
android:previewImage="@drawable/preview"
android:initialLayout="@layout/widget_layout"
android:autoAdvanceViewId="@id/stack_view">
</appwidget-provider>
Run Code Online (Sandbox Code Playgroud)
是否可以以某种方式为ListView应用程序小部件完成或模拟?
非常感谢,
劳伦特
我需要找到任何AppWidget id来测试一些功能.执行此操作的代码:
List<AppWidgetProviderInfo> infos = mAppWidgetManager.getInstalledProviders();
for (int i = 0; i < infos.size(); i++) {
int ids[] = mAppWidgetManager.getAppWidgetIds(infos.get(i).provider);
if (ids.length != 0) {
Log.d("TAG", "Found non-zero-length provider!");
id = ids[0];
info = infos.get(i);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是ids []长度总是0!为什么以及如何解决它?
更新:我已将此行添加到循环的开头:
Log.d("TAG", provider.getPackageName() + "; " + provider.getClassName());
Run Code Online (Sandbox Code Playgroud)
它打印:
D/TAG ( 5686): Providers count: 12
D/TAG ( 5686): com.andrew.apollo; com.andrew.apollo.app.widgets.AppWidget11
D/TAG ( 5686): com.andrew.apollo; com.andrew.apollo.app.widgets.AppWidget41
D/TAG ( 5686): com.andrew.apollo; com.andrew.apollo.app.widgets.AppWidget42
D/TAG ( 5686): com.android.browser; com.android.browser.widget.BookmarkThumbnailWidgetProvider
D/TAG ( 5686): com.android.calendar; com.android.calendar.widget.CalendarAppWidgetProvider …Run Code Online (Sandbox Code Playgroud) 我正在开发一个具有多个应用程序小部件的应用程序,其中一些正在使用a GridView来显示其内容.内容是一堆电影封面艺术图像,我想保留图像的原始宽高比.
或者,我正在寻找一种方法来声明图像的宽高比.GridView然而,重要的是图像仍然适合用户改变应用程序小部件大小的宽度.
由于ImageView在处理RemoteViews 时不可能使用子类,这是不可能的.我目前使用ScaleType.CENTER_CROP的ImageView以及所定义的高度和宽度,但你可以想像,这不是完美的.
有什么建议?
有没有办法强迫AppWidget工作,甚至App被移动到SD卡而SD卡不是unmounted?文件说:
...如果您的应用程序使用以下任何功能,则不应允许将其安装在外部存储上,因为在卸载外部存储时会引起后果:
...
应用程序小部件
您的应用程序小部件将从主屏幕.重新装入外部存储时,在系统重置主应用程序之前,用户无法选择您的应用程序小组件(通常直到系统重新启动).
似乎文档说AppWidget将从主屏幕if用户卸下SD卡.但是当我将模拟器中的App移动到SD卡(我没有卸载SD卡)时,problem loading widget在主屏幕中看到消息,小部件也不可用对于小部件列表中的用户.为什么?
我的问题很严重Android application:
调用
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(appWidgetId, getWidgetView(context, appWidgetId));
Run Code Online (Sandbox Code Playgroud)
在该public void onReceive(Context context, Intent intent)方法中根本没有结果.该RemoteViews所产生看起来是有效的(编程而言),但widget不更新(它保留旧值).
我发现了一些类似的问题,但没有人回答:
android ×10
animation ×1
background ×1
identifier ×1
listview ×1
manifest ×1
remoteview ×1
stack ×1