标签: android-appwidget

如何打开启动器的小部件选择器?

我想从我的活动中打开启动器的小部件选择器(例如,当我们长按主屏幕时得到的那个)。我想要实现的是,我想将用户带到我的小部件,以便他有更多机会考虑添加它。

以编程方式将小部件添加到主屏幕将是最好的情况。但是,因为那是不可能的,我想尽可能接近让用户添加小部件。

我尝试了以下操作,但只打开一个包含所有小部件的对话框(而不是启动器),并且通过选择一个没有任何反应。

Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
startActivityForResult(pickIntent, 1234);
Run Code Online (Sandbox Code Playgroud)

如何使这项工作?非常感谢有关这种情况的任何建议。

android android-widget android-appwidget

6
推荐指数
1
解决办法
2692
查看次数

在App小部件上聆听手势

我在Android中创建了一个应用程序小部件,并希望为其添加一些基于手势的功能.例如:当用户滑动时,显示新的数据集.AppWidgets不支持AFAIK手势,但我见过具有类似功能的小部件(例如HTC小部件相册和天气小部件).

请帮助我,让我知道我是否遗漏了什么.

欢迎链接到教程,文档或示例代码.

谢谢.

android android-appwidget

5
推荐指数
1
解决办法
843
查看次数

启动Launcher后,AppWidget PendingIntent无法正常工作

我有一个AppWidget有2个待定意图.他们大部分时间都在工作,但过了一段时间他们就停止了回应.我唯一能够确定的是,它们在Launcher重启后瘫痪,即我使用Launcher Pro,有时会调整设置并且必须重新启动它.之后他们根本不工作.

这里是我onRecieve()onUpdate()方法:

   public void onReceive(Context context, Intent intent)
{
    super.onReceive(context, intent);
    String action = intent.getAction();
    if(action.equals("android.tristan.widget.digiclock.CLICK"))
    {
        PackageManager packageManager = context.getPackageManager();
        Intent alarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);

        String clockImpls[][] = {
                {"HTC Alarm Clock", "com.htc.android.worldclock", "com.htc.android.worldclock.AlarmClock" },
                {"Standar Alarm Clock", "com.android.deskclock", "com.android.deskclock.AlarmClock"},
                {"Froyo Nexus Alarm Clock", "com.google.android.deskclock", "com.android.deskclock.DeskClock"},
                {"Moto Blur Alarm Clock", "com.motorola.blur.alarmclock",  "com.motorola.blur.alarmclock.AlarmClock"}
        };

        boolean foundClockImpl = false;

        for(int i=0; i<clockImpls.length; i++) {
            String vendor = clockImpls[i][0];
            String packageName = clockImpls[i][1];
            String className = clockImpls[i][2]; …
Run Code Online (Sandbox Code Playgroud)

android onclick android-intent android-pendingintent android-appwidget

5
推荐指数
1
解决办法
2692
查看次数

添加后重新配置小部件

将窗口小部件的配置活动添加到主屏幕后,如何重新打开它?

Google搜索中的以下代码不起作用,因为多余的小部件ID不会传递到活动中:

String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
Intent configIntent = new Intent(context, Configuration.class);
configIntent.setAction(ACTION_WIDGET_CONFIGURE);
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
views.setOnClickPendingIntent(R.id.editButton, configPendingIntent);
Run Code Online (Sandbox Code Playgroud)

configuration android widget android-appwidget

5
推荐指数
2
解决办法
705
查看次数

应用程序小部件中的ViewFlipper

我正在玩构建一个新的小部件并且正在查看Android应用程序小部件文档,特别是关于支持哪些小部件类的部分.我注意到ViewFlipper受支持,但我很难找到如何在主屏幕小部件中使用它的任何示例.特别是,我想知道是否可以手动触发交换视图.在一个活动中,这看起来相对简单,一个例子是挂钩按钮的onclick监听器来调用鳍状肢的showNext().

RemoteViews对象有showNext和showPrevious方法,但我不知道我理解如何挂钩起来,从用户与小部件交互触发的事件.任何人都可以提供何时可以调用这些方法的示例?

看起来小部件中的按钮只能连接到意图而不是代码来练习鳍状肢.如果这个限制为真,那么在app小部件中唯一使用视图翻转器来自动翻转视图吗?

android viewflipper android-appwidget

5
推荐指数
1
解决办法
8453
查看次数

Android AppWidget未在某些电话上显示

我有一个非常简单的appwidget(两个文本视图和一个按钮).我在触摸板,Droid 1和Droid Razr上进行了测试.它适用于除Razr之外的所有事物.当我将小部件添加到主屏幕时,它不会显示; 它只是看不见的.如果我按住它会选择一个小部件的位置,如果我移动它,我会看到其他小部件移开,但它完全不可见.

我在onReceiveand和onEnabled方法中放了一些Toast,并Toast显示了所有正确的信息(即意图动作和附加内容).

有人有这方面的经验吗?

编辑:请记住,这仅用于调试,不遵循最佳实践

public class GoogleTalkWidget extends AppWidgetProvider {

    Button sendMessage;

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Received Intent Action = " +
                intent.getAction(), Toast.LENGTH_SHORT).show();

        if(intent.getAction().equals(Utils.RECEIVED_MESSAGE_WIDGET)){
            RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.main_widget);

            views.setTextViewText(R.id.widget_message, 
                (CharSequence)intent.getStringExtra("MESSAGE"));

            views.setTextViewText(R.id.widget_sender, 
                (CharSequence)intent.getStringExtra("SENDER"));

            Toast.makeText(context, "Received " + 
                intent.getStringExtra("MESSAGE") + " FROM " + 
                intent.getStringExtra("SENDER"), Toast.LENGTH_SHORT).show();

            ComponentName cn = new ComponentName(context, 
                GoogleTalkWidget.class);  

            AppWidgetManager.getInstance(context).updateAppWidget(cn, views);

        }
        super.onReceive(context, intent);
    }

    @Override 
    public void onEnabled(final Context context){ …
Run Code Online (Sandbox Code Playgroud)

android android-widget android-appwidget

5
推荐指数
1
解决办法
363
查看次数

Android:针对app小部件的instumentation测试

我希望自动化测试主屏幕小部件.我看过android测试页面InstrumentationTestRunner类.我也看过CTS源代码; 但我找不到任何有用的东西.

我能找到的最接近的是这个Robolectric ShadowAppWidgetManager,但我不确定如何使用它.

你能否分享一下你如何测试app小部件?我可以使用任何框架或库吗?

非常感谢你的帮助!

testing junit android android-appwidget

5
推荐指数
1
解决办法
697
查看次数

Android AppWidget onUpdate在启动时

onUpdate AppWidget是否在启动时调用?

我在onUpdate中设置了一个警报,我想知道onUpdate是否会在启动时被调用,或者我是否应该使用BOOT_COMPLETED意图.

谢谢.

android android-appwidget

5
推荐指数
1
解决办法
664
查看次数

RemoteViewsFactory grantUriPermission用于获取数据

有一个带有Listview的AppWidget我想用RemoteViewsService.RemoteViewsFactory填充.

我有以下错误

E/AndroidRuntime(1203):java.lang.SecurityException:Permission Denial:读取com.crbin1.myapp.data.ProviderLTD uri内容://com.crbin1.myapp.data.ProviderLTD/TB_WIDGET3P来自pid = 413,uid = 10013要求提供者被导出,或者grantUriPermission()

如果我在清单中导出ProviderLTD(我的内容提供商),它可以工作,但我想避免导出它.

另一个解决方案是grantUriPermission().我在清单中将grantUriPermissions设置为true,但现在我不明白我的代码中我必须授予权限.

public class Widget3pService extends RemoteViewsService {
       @Override
        public RemoteViewsFactory onGetViewFactory(Intent intent) {
           return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
        }
    }


    class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
        private List<ObjW3Task> mWidgetItems = new ArrayList<ObjW3Task>();
        private Context mContext;
        private int mAppWidgetId;

        public StackRemoteViewsFactory(Context context, Intent intent) {
            mContext = context;
            mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
        }

        public RemoteViews getViewAt(int position) {
            // use mWidgetItems to populate ListView
            // fillInIntent for listeners
            return myRemoteViews;
        }

        public void …
Run Code Online (Sandbox Code Playgroud)

android android-permissions android-appwidget

5
推荐指数
1
解决办法
512
查看次数

带有ListView的Android Widget仅显示加载视图

我正在尝试使用ListView实现Android App Widget.我开始关注Google文档但是我遇到了正在显示的加载视图列表,而不是正常的列表项.有没有人有小部件列表视图的经验?

代码与Google文档中的代码相同.我使用ListView而不是StackView作为数据源我使用数据库(这不是问题,数据是正确获得的 - 我通过返回正常的列表项视图而不是默认的加载视图尝试了这一点)

搜索互联网没有帮助我...我也试过这个教程,但它也没有用.我希望有人可以帮助我,提前谢谢!

WidgetProvider.java

public class WidgetProvider extends AppWidgetProvider {

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

        for (int i = 0; i < appWidgetIds.length; i++) {

            Intent intent = new Intent(context, EventWidgetService.class);
            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget);
            rv.setRemoteAdapter(android.R.id.list, intent);
            rv.setEmptyView(android.R.id.list, R.id.tvEmptyList);

            appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
        }

        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
}
Run Code Online (Sandbox Code Playgroud)

WidgetService.java

public class EventWidgetService extends RemoteViewsService {

    @Override …
Run Code Online (Sandbox Code Playgroud)

android android-listview remoteview android-appwidget

5
推荐指数
1
解决办法
2448
查看次数