看起来像我的#$#%$%#$接收器不是清单中的应用程序元素
你好
我刚刚创建了helloworld appwidget以了解它的工作原理.我在adroid开发站点上关注了dev示例.但由于某种原因,小部件不希望在小部件列表中显示.
AndroidManifest.xml中
<receiver android:name="VoiceRIAWidget" android:label="Voice RIA">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
Run Code Online (Sandbox Code Playgroud)
appwidget_info.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:label="Voice RIA" android:minWidth="50dp" android:minHeight="50dp"
android:updatePeriodMillis="86400000" android:initialLayout="@layout/appwidget">
</appwidget-provider>
Run Code Online (Sandbox Code Playgroud)
VoiceRIAWidget
public class VoiceRIAWidget extends AppWidgetProvider
{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++)
{
int appWidgetId = appWidgetIds[i];
CharSequence text = "Hello";
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.appwidget);
views.setTextViewText(R.id.appwidget_text, text); …Run Code Online (Sandbox Code Playgroud) 更新:我打开了一个问题,如果您遇到同样的问题,请为其加注. http://code.google.com/p/android/issues/detail?id=28016
我有一个带有gridview的appwidget.
当我开始向我的小部件添加项目时,几乎总是我得到两次显示的第一个项目(而不是显示第一个项目和第二个项目).
如果我做一个小部件更新意图,那么问题是固定的,永远不会返回(假设我的gridview上已经有两个项目).
但总是在添加前两个项目时发生.
任何想法可能是什么?
更新:我刚刚注意到,当一个新项目添加到GridView时,它总会发生.如果我在不添加新项目的情况下刷新小部件,那么它可以正常工作.
我看到的另一件事是getViewAt方法总是为第一个项目(位置零)调用两次.也许它有关系?
我非常密切地关注这里的示例:http: //developer.android.com/resources/samples/WeatherListWidget/src/com/example/android/weatherlistwidget/WeatherWidgetService.html
这是我的RemoteViewsService,我认为这是相关的部分,但我不确定.还有什么可以影响它?
package com.manor.TestApp;
public class TestAppRemoteViewsService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new TestAppViewsFactory(this.getApplicationContext(), intent);
}
}
class TestAppViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
//private int mAppWidgetId;
private TestDb mDb = null;
private int mCount = 0;
private String[] mData;
public TestAppViewsFactory(Context context, Intent intent) {
mContext = context;
/*mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);*/
}
@Override
public void onCreate() {
mDb …Run Code Online (Sandbox Code Playgroud) 我在包“com.developer.application”下有一个 AppWidgetProvider
我尝试在包“com.developer.application.widgets”下移动这个 AppWidgetProvider 这样做后,我更新了 AndroidManifest 中的所有引用以适应移动。
将更改上传到设备后,当前在主屏幕上的小部件(与上述 AppWidgetProvider 相关联)中断并永远显示“正在加载”图形。
我知道我的指针/包路径没有问题,因为如果我将小部件重新添加到主屏幕,一切正常。
所以简单地说,将 AppWidgetProvider 移动到不同的包并更新所有必要的引用仍然会破坏活动的主屏幕小部件。
有任何想法吗?谢谢!
马特。
我已经对Android编程了一段时间,但这真让我感到困惑.
所以我有一个简单的appwidget和textview.我只是希望文本视图中的文本字体大小在用户调整小部件大小时向上/向下扩展,以便在调整应用程序大小时使文本更大.我尝试了几种解决方案但一切都失败了:
简单地使用"sp"(缩放像素)单位作为字体大小 - 当窗口小部件大小改变时,这不会缩放文本(我也没想到它!).
使用我自己的和扩展的onSizeChanged方法扩展TextView.但是你不能在一个小部件中拥有基本UI类的后代(文档也说明了这一点).
由于没有方法可以获得当前的appWidget大小,我只是被困在这里.
是的,我知道一个解决方案是创建不同版本的小部件,如1x4和2x4等,但肯定还有另一种方法吗?
欢迎任何想法?
我的应用程序在服务中更新,并首先执行此操作以获取小部件的ID:
AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
int[] widgetIds = widgetManager.getAppWidgetIds(new ComponentName(this, WidgetReceiver.class));
Run Code Online (Sandbox Code Playgroud)
有时,即使窗口小部件仍在主屏幕上,此方法也将返回一个空数组.我四处搜索,找不到任何相关信息.问题是它并不总是发生,只是有时候(尽管一旦看起来它在后续的更新尝试中不会成功的话就会发生).
有没有人碰到这个,更好的是找到了解决方案?非常感激.
我目前正在开发一个appwidget,不幸的是它不适合更大屏幕尺寸的手机.如何确保appwidget具有适用于所有类型手机的全宽度?
起初我以为这可以通过使用width="fill_parent"但不起作用来完成..小部件没有填充手机的宽度(我不确定它是否基于xml文件夹下的minWidth)
我也试过添加layout-sw480dp,layout-sw600dp,layout-sw720dp它仍然无法正常工作... appwidget只是不会填充手机的整个宽度..
任何帮助深表感谢!
我是android开发的新手。我正在尝试为我的应用程序制作一个小部件,其中将包含一个列表视图,每个列表视图除了标题和内容外还具有2个按钮。
我试图在按下该元素的按钮时(在主屏幕上)隐藏应用程序小部件中listitem的相应元素。
首先,我尝试检查按钮单击是否获得了任何响应,以及是否可以检测到是否可以找到项目的位置。所以我这样做:
listprovider.java(实现remoteviewfactory):
@Override
public RemoteViews getViewAt(int position) {
final RemoteViews remoteView = new RemoteViews(
context.getPackageName(), R.layout.list_row);
ListItem listItem = listItemList.get(position);
remoteView.setTextViewText(R.id.heading, listItem.heading);
remoteView.setTextViewText(R.id.content, listItem.content);
Bundle extras = new Bundle();
extras.putInt(WidgetProvider.EXTRA_ITEM, position);
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
// Make it possible to distinguish the individual on-click
// action of a given item
remoteView.setOnClickFillInIntent(R.id.buttonwidget, fillInIntent);
return remoteView;
}
Run Code Online (Sandbox Code Playgroud)
然后在WidgetProvider.java中(扩展了AppWidgetProvider):
for (int i = 0; i < N; ++i) {
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);
Intent clickIntent …Run Code Online (Sandbox Code Playgroud) 我在我的开发AppWidget根据Android的文档,装我的光标onCreate(),并在重新加载它onDataSetChanged(),一切工作正常,直到我把我的一些断点RemoteViewsService.RemoteViewsFactory,并惊奇地发现,onDataSetChanged()是始终调用后调用onCreate(),这使我的光标装载两次,当第一创建.我在Android 4.4.3上.
根据Api doc,
public abstract void onDataSetChanged()
在API级别11中添加
在远程适配器上触发notifyDataSetChanged()时调用.这允许RemoteViewsFactory通过更新任何内部引用来响应数据更改.注意:在此方法中可以安全地同步执行昂贵的任务.在此期间,旧数据将显示在窗口小部件中.
似乎只能通过自己手动调用notifyDataSetChanged()来触发此调用.
但是根据Appwidget指南,
在onCreate()中,您可以为数据源设置任何连接/光标.繁重的工作,例如下载或创建内容等,应该推迟到onDataSetChanged()或getViewAt().在此呼叫中花费超过20秒将导致ANR.
通过说延期,是否暗示onDataSetChanged()将被称为后onCreate()?我不太确定......但它确实说我应该把光标放在里面onCreate().
我自己尝试调查此问题,但是可用的源代码正在使用,Binder因此远程调用者仍然未知,因此我无法检查其来源.
你有什么主意吗?
这件事让我抓狂.这是它的工作原理
1.一切都设为默认值
2.添加到小部件布局的白色背景
主要小部件布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="@android:color/white" -- this line only applies for case 2
android:padding="@dimen/widget_padding">
<TextView
...
android:background="@color/primary"
android:textColor="@android:color/white"/>
<ListView
...
android:drawSelectorOnTop="true""/>
<TextView
...
android:textColor="?android:attr/textColorSecondary"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
列表项目布局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
...
android:id="@+id/widgetItem">
<TextView
...
android:textColor="@android:color/black"
android:textSize="14sp"/>
<TextView
...
android:textColor="@color/negative_amount"
android:textSize="16sp"
android:textStyle="bold"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我花了一天时间尝试所有可能的组合,但没有任何帮助.并且我没有得到这样的事实:列表视图周围的某些布局的无关背景更改完全改变了行为.WTF?
我想以最干净的方式解决它 - 没有自定义选择器的黑客攻击.如果可能的话,这应该直接开箱即用.
设备在空闲一段时间后,我的应用在Android O设备上未收到ACTION_SCREEN_ON或ACTION_USER_PRESENT.我的应用程序有小部件.当用户解锁手机时,我用来自后端的数据更新这些小部件.当我定位SDK 25时,此功能一直在工作.现在我正在使用目标SDK 26编译应用程序.我将获取小部件数据的服务转换为JobService.当用户将小部件添加到主屏幕时,Everythings工作正常.然后,如果我杀了应用程序并关闭屏幕并在5分钟后说如果我解锁手机,我的应用程序会收到ACTION_SCREEN_ON和ACTION_USER_PRESENT意图我可以启动服务并更新小部件上的数据.但是,如果我将设备闲置几个小时,然后当我解锁屏幕时,应用程序不会收到ACTION_SCREEN_ON和ACTION_USER_PRESENT意图.这是由于Android O对隐式意图的限制.如果是这样你怎么解决这个问题?如果没有,那么什么方法对你有用?
android android-appwidget android-implicit-intent android-8.0-oreo