标签: android-appwidget

Android Widget未更新

我正在尝试实现一个简单的小部件,以便在主屏幕上显示.我遇到的问题是onUpdate只在我安装小部件时被调用一次.配置如下.注意:我不会将更新周期留在20秒,因为我知道这会消耗电池(只是测试).

组态:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:minWidth="294dp"
   android:minHeight="72dp"
   android:updatePeriodMillis="20000"
   android:initialLayout="@layout/my_custom_app_widget">`
</appwidget-provider>`
Run Code Online (Sandbox Code Playgroud)

清单摘录:

<receiver android:name="MyCustomWidgetProvider">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/my_custom_app_widget_info" />
</receiver>
Run Code Online (Sandbox Code Playgroud)

我在安装窗口小部件时会观察到以下行为:在onReceive上的我的WidgetProvider类中调用onEnabled然后onReceive,然后调用onUpdate.

之后,窗口小部件显示,并且永远不会再次调用onUpdate.我还会在调用onUpdate时检查提示器的设置,并且上面用XML设置的所有内容(例如更新周期)都是正确的.

android widget android-appwidget

37
推荐指数
2
解决办法
2万
查看次数

在Android中打开/关闭相机手电筒的小工具

我正在开发一个用于打开/关闭手机摄像头的小部件.

我创建了一个可以像切换按钮(开/关)一样工作的小部件.

行为如下所示:当我启用小部件时,有时候led灯仍然亮着.但它不会打开/关闭相机,但它会改变图标.

我无法弄清楚实际问题是什么.

在Activity(火炬之光应用程序)中同样适用.

任何人都可以解释我如何解决我的问题?

我哪里错了?

你可以查看我到目前为止所做的代码

onUpdate 方法

@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {

         //super.onUpdate(context, appWidgetManager, appWidgetIds);

        remoteViews = new RemoteViews( context.getPackageName(), R.layout.widgetlayout);
        watchWidget = new ComponentName( context, FlashLightWidget.class );

        Intent intentClick = new Intent(context,FlashLightWidget.class);
        intentClick.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ""+appWidgetIds[0]);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, appWidgetIds[0],intentClick, 0);
        remoteViews.setOnClickPendingIntent(R.id.myToggleWidget, pendingIntent);
        appWidgetManager.updateAppWidget( watchWidget, remoteViews );
        ctx=context;      
    }
Run Code Online (Sandbox Code Playgroud)

onReceive 方法如下:

@Override

    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        remoteViews = new RemoteViews( context.getPackageName(), R.layout.widgetlayout);
        if (intent.getAction()==null) …
Run Code Online (Sandbox Code Playgroud)

android widget android-widget android-camera android-appwidget

37
推荐指数
2
解决办法
3万
查看次数

Android - 如何更新小部件,但只有在可见时?

我将创建需要每分钟更新其内容的小部件(它显示与时间相关的数据).

但是,如果窗口小部件当前不可见,则无需更新窗口小部件,这意味着:

  • 屏幕已关闭
  • 另一个应用正在运行
  • 小部件放在另一个(不可见的)主屏幕选项卡上

每分钟仅更新可见小部件的最佳方法是什么 - 无需唤醒设备或进行不必要的计算?在小部件变得可见之后,更新前的小延迟是可接受的.

android visible android-appwidget

30
推荐指数
3
解决办法
1万
查看次数

启动配置活动时调用Widget onUpdate

我正在实现一个小部件,我面临以下问题:

1) onUpdate当我将小部件添加到主屏幕时调用,即使我指定了配置活动.一旦我将它添加到主屏幕,APPWIDGET_ENABLED就会发送广播,然后发送,APPWIDGET_UPDATE然后启动配置活动..这是一个错误吗?onUpdate在配置活动返回之前,我应该如何理解被调用的方法?我可以通过共享偏好值来实现,但我希望它的行为与开发人员指南中的内容相同,即onUpdate不应该调用该方法.

2) onUpdate每秒都没有被调用updatePeriodMillis,这已被设置为10000,即10用于测试目的的秒数.我receiver在Manifest文件中的声明中是否遗漏了什么?我一直收到Lint警告导出的接收器不需要许可,但我认为这是一个Lint问题而不是我的错. 编辑:我刚刚在参考文档中找到了这个:注意:updatePeriodMillis请求的更新不会每30分钟发送一次.因此,我不会更新窗口小部件的频率是正确的,我将时间更改为1800000毫秒.

3)我想将自己的广播操作传递给窗口小部件提供程序,receiver在Manifest中添加另一个阻止相同提供程序类的块是正确的还是我应该在intent-filter包含该APPWIDGET_UPDATE 操作的内容中添加另一个意图操作?顺便说一下,我评论了我的第二个receiver区块,这不是上述问题的原因.我创建了另一个receiver 块,因为我想将其声明为未导出,以便intent-filter 仅通过我的应用程序代码而不是其他任何人触发操作.

AndroidManifest.xml中

    <receiver android:name="MyWidgetProvider" 
        android:exported="true">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/my_widget_info" />
    </receiver>
    <receiver android:name="MyWidgetProvider" 
        android:exported="false">
        <intent-filter>
            <action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

my_widget_info.xml

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="110dp"
    android:updatePeriodMillis="1800000"
    android:initialLayout="@layout/my_widget_layout"
    android:configure="org.test.mywidget.MyWidgetConfiguration" 
    android:resizeMode="none">
</appwidget-provider>
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-widget android-manifest android-appwidget

25
推荐指数
1
解决办法
2852
查看次数

窗口小部件预览保存位置

我使用默认的"小部件预览"应用程序在Honeycomb模拟器中截取了我的应用程序小部件的屏幕截图,但我不知道图像保存在哪个位置.我一直在寻找使用adb shell命令以及查看Gallery应用程序,但我一直无法找到它.我可以通过电子邮件发送或发送彩信,但我想我不需要在模拟器上设置邮件帐户.

是否有一种简单的方法来获取我错过的图像,或者我是否真的需要在模拟器上设置邮件帐户?

提前致谢.

android android-3.0-honeycomb android-appwidget

22
推荐指数
2
解决办法
4201
查看次数

检测Android主屏幕的旋转

我有一个App Widget,当它更新时,获取具有与小部件匹配的尺寸的图像,并将该图像放入ImageView(通过RemoteViews).它工作得很好.

但是对于支持主屏幕旋转的设备(我不是在谈论Activity基于设备方向的旋转,而是关于主屏幕本身的旋转),小部件的尺寸和宽高比从横向到纵向,反之亦然......即不保持固定尺寸.

因此,我的小部件需要能够检测主屏幕何时旋转,并获取新图像(或至少加载不同的预取图像).

我无法为我的生活找出是否以及如何做到这一点.有线索吗?

android rotation homescreen android-appwidget

21
推荐指数
2
解决办法
1749
查看次数

如何禁用Widget updatePeriodMillis?

我想弄清楚如何在我的小部件上禁用更新周期?我不需要这个特殊功能.添加它的时候我调用onUpdate的小部件就好了......

android android-widget android-appwidget

20
推荐指数
1
解决办法
4936
查看次数

如何为Android App Widget提供标签/名称

我刚刚完成了我的第一个应用程序,它工作正常,我已经把它变成了一个主屏幕小部件.但它没有它的名字.我正在关注的教程没有说明它,不应该只是应用程序的名称并自动拉入?

android android-widget android-appwidget

19
推荐指数
2
解决办法
1万
查看次数

如何使用配置活动创建应用小部件,并首次更新它?

这真让我抓狂.即使使用推荐的做法,我也不知道如何从配置活动更新app小部件.为什么不在应用程序小部件创建上调用更新方法超出了我的理解.

我想要的是:包含项目集合(带有列表视图)的应用程序小部件.但是用户需要选择一些东西,所以我需要一个配置活动.

配置活动是ListActivity:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class ChecksWidgetConfigureActivity extends SherlockListActivity {
    private List<Long> mRowIDs;
    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    private BaseAdapter mAdapter;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setResult(RESULT_CANCELED);
        setContentView(R.layout.checks_widget_configure);

        final Intent intent = getIntent();
        final Bundle extras = intent.getExtras();
        if (extras != null) {
            mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
        }

        // If they gave us an intent without the widget id, just bail.
        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
            finish();
        }

        mRowIDs = new ArrayList<Long>(); // it's actually loaded …
Run Code Online (Sandbox Code Playgroud)

collections android android-appwidget

19
推荐指数
2
解决办法
2万
查看次数

Android:有没有办法获得RemoteViews对象的大小?

在我的app小部件中,我有一个LinearLayout,其高度和宽度设置为fill_parent.有没有办法在运行时获取已分配给该视图的实际大小?

android android-appwidget

18
推荐指数
1
解决办法
3700
查看次数