标签: android-appwidget

将AppWidgets绑定到AppWidgetHost - Android

当您通常想要在Android中添加AppWidget时,有一个列表,您需要选择一个小部件并将其绑定到主屏幕.

我正在尝试构建一个app,它有自己的appWidgetHost和我为它构建的特定App Widgets.

我有两个问题:

  1. 我希望能够自动将小部件绑定到我的AppWidgetsHost,而无需用户从列表中选择.
  2. 我想创建自己的"选择窗口小部件列表"并加载我创建的窗口小部件.

简单来说; 我的AppWidgets有我的应用程序,我希望完全控制将appWidget绑定到appWidgetHost等.

3人在Google论坛中提出了类似的问题:

  1. 链接1
  2. 链接2
  3. 链接3

我发现可能的唯一答案是链接号2.Paraneet(其中一个回复者)说你可以在/ system/app下安装应用程序而不是/ data/app,因为有些安全问题.但我不确定它是否是一种可靠的生产解决方案,我想更多地了解这样做的优点和缺点.

谢谢,Shai.

android android-widget android-appwidget

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

如何在appwidgetprovider中查找视图ID?

我有一个从appwidgetprovider扩展的appwidget.

我创建了一个名为main_layout.xml的布局xml文件并添加了一个按钮.如果我开发了listActivity,我会使用以下路径到达此按钮:R.layout.main_layout.button01.

(Button)findViewById(R.layout.main_layout.button01)
Run Code Online (Sandbox Code Playgroud)

Activity类有一个名为findViewById()的成员方法,但appwidgetprovider却没有.

如何在布局中找到我的按钮?

对不起我的英语不好

android view android-appwidget

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

两种方法之间更新Android App Widget有什么区别?

我在网上/书中读到了一些关于App Widget的例子,更新小部件的正常例子是onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)AppWidgetProvider的方法,如下所示:

final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
 int appWidgetId = appWidgetIds[i];
 RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
 updateViews.setTextViewText(R.id.mytext, "updated text");

 appWidgetManager.updateAppWidget(appWidgetId, updateViews);    
}
Run Code Online (Sandbox Code Playgroud)

它会循环更新每个小部件.

但是现在,我必须实现一个App Widget,它在BroadcastReceiver onReceive(Context context, Intent intent)方法中更新,因为没有传入int [] appWidgetIds.所以我实现了这样的代码:

RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
updateViews.setTextViewText(R.id.mytext, "updated text");

ComponentName myComponentName = new ComponentName(context, AndroidBatteryWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myComponentName, updateViews);
Run Code Online (Sandbox Code Playgroud)

它没有逐个更新小部件,但实际上所有小部件都立即更新.即使它按我的意愿工作,但我很困惑为什么不需要像以前一样逐个更新所有小部件.

两种方法有什么区别?

我可以发送另一个广播BroadcastReceiver.onReceive()来触发AppWidgetProvider.onUpdate()吗?怎么样?

android widget broadcastreceiver android-appwidget

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

升级/重新安装应用程序后如何更新Android AppWidget?

我创建了一个应用程序(https://play.google.com/store/apps/details?id=com.widget.analytics),该应用程序使用AppWidget在Android主屏幕上显示一个Google Analytics统计信息.

不幸的是,在将应用程序升级到新版本后,用户需要删除之前创建的所有小部件,并且必须再次安装它们.这非常烦人.然而,我确信有办法解决问题.

升级应用程序后,小部件不会被销毁,它们只是处于"默认"状态,它们从布局继承.

我可以用来更新小部件的四个小部件回调中的任何一个吗?有没有我可以采取行动并更新小部件的后级调用回调?

android appwidgetprovider android-appwidget

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

计算appwidget的高度

通过谷歌搜索这个问题,我无法弄清楚或找到解决方案.我有一个appwidget的Android应用程序,看起来像http://www.livescorewidget.eu/img/screendumps/widget.png,我正在动态添加数据行.由于设备不同,窗口小部件的高度不同,因此我的行可以使用不同的空间量.我想知道我的小部件使用了多少倾角或像素,所以我可以计算有多少行有空间.可能吗?

如果您可以计算行的布局中可用的高度,那就更好了.

谢谢

android android-appwidget

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

AppWidgetHostView无法正确处理onClick/onLongClick

我正在开发的启动,我现在用的应用小部件的工作,我跟着从这里教程: AppWigetHost tutrial -莱昂纳多菲舍尔 一切顺利,直到我试图在AppWidgetHostView加入onLongCick监听器

private void createAppWidget(Intent data) {
    Bundle extras = data.getExtras();
    final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
    AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
    AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, appWidgetInfo);
    hostView.setAppWidget(appWidgetId, appWidgetInfo);
    LinearLayout.LayoutParams params = createLayoutParams(appWidgetInfo); 
    rootLayout.addView(hostView, params);
    hostView.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(getApplicationContext(), "Long click " + appWidgetId, Toast.LENGTH_LONG).show();
            return true;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当我在主机上添加一个小部件(默认的谷歌模拟时钟) - 并试图长时间点击它,它只是不起作用!长按后,它只会打开时钟应用程序(单击的默认操作).

谁能告诉我如何解决它?这是我的完整代码:http: //pastebin.com/61TkuLvx

添加 我刚刚再次检查:
----如果我长时间点击Clock小部件的边界,则会触发longClick事件!
----我添加了我的自定义appwidget(没有onclick处理程序):所以longclick事件总是被正确触发.
所以我想,它必须与touchevent处理程序/调度程序有关.

添加 我刚刚尝试在主机视图的所有子项上设置onLongClick,如下所示:

private void createAppWidget(Intent data) {
...
... 
    setChildrenViewLongClick(hostView, …
Run Code Online (Sandbox Code Playgroud)

android android-appwidget

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

如何在没有代码的情况下隐藏Android布局xml中的部分可见视图?

请在回答前完整阅读问题!

假设我有两个观点:

  1. first (黄色)在底部
  2. second (青色)填充上面的其余视图 first

父视图的大小是动态的.

当父高度动态设置为第一列中的值时,如何实现以下预期列UI?请注意部分可见视图是如何隐藏而不是裁剪的.

我想要实现的目标

约束

  • 任何代码都不是可能的,我知道可以用以下方法解决问题: second.setVisibility(second.getHeight() < SECONDS_PREFERRED_SIZE? GONE : VISIBLE) 但是我没有访问权限,getHeight()所以解决方案必须是裸xml.
    可以轻松编写仅编写UI状态的代码RemoteViews.
  • 基于以上没有自定义视图是允许的,没有吨甚至图书馆,只是基本的布局管理器:
    FrameLayout,LinearLayout,RelativeLayout,GridLayout
    或者作为最后手段的先进者之一:
    ViewFlipper,ListView,GridView,StackView或者AdapterViewFlipper
  • layout_widthlayout_height动态的
    .在我固定它,所以它很容易尝试不同的变化的例子.上面的图像被layout_height更改为模拟我想要处理的可能性的显示值.
  • 我用过TextView,但它应该普遍适用于任何View
  • 细心的人可能已经注意到,上面的限制解决主屏幕应用部件RemoteViews.

尝试

我尝试使用RelativeLayout和实现LinearLayout,但它们都表现为图片上的实际列.

的RelativeLayout

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" …
Run Code Online (Sandbox Code Playgroud)

android android-widget android-layout android-linearlayout android-appwidget

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

Android Lollipop:在将Home小部件添加到主屏幕时,Launcher崩溃了

当添加Widget时,Launcher在Android Lollipop上崩溃,发出以下消息(在以前的Android版本上运行正常):

编辑:这只发生在横向方向.

12-16 12:35:10.208: E/AndroidRuntime(960): 
java.lang.RuntimeException: Unable to resume activity {com.android.launcher/com.android.launcher2.Launcher}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=5, result=-1, data=Intent { (has extras) }}  to activity {com.android.launcher/com.android.launcher2.Launcher}: java.lang.NullPointerException:      Attempt to read from field 'android.content.pm.ActivityInfo     
android.appwidget.AppWidgetProviderInfo.providerInfo' on a null object reference
12-16 12:35:10.208: E/AndroidRuntime(960):  at 
android.appwidget.AppWidgetHostView.getRemoteContext(AppWidgetHostView.java:465)
12-16 12:35:10.208: E/AndroidRuntime(960):  at   
android.appwidget.AppWidgetHostView.updateAppWidget(AppWidgetHostView.java:376)
12-16 12:35:10.208: E/AndroidRuntime(960):  at com.android.launcher2.LauncherAppWidgetHostView.updateAppWidget(LauncherAppWidgetHostView.java:54)
12-16 12:35:10.208: E/AndroidRuntime(960):  at android.appwidget.AppWidgetHost.createView(AppWidgetHost.java:325)
12-16 12:35:10.208: E/AndroidRuntime(960):  at com.android.launcher2.Launcher.completeTwoStageWidgetDrop(Launcher.java:703)
12-16 12:35:10.208: E/AndroidRuntime(960):  at  com.android.launcher2.Launcher.onActivityResult(Launcher.java:664)
Run Code Online (Sandbox Code Playgroud)

这是提供商信息:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth="201dp"
  android:minHeight="201dp"
  android:updatePeriodMillis="180000"
  android:initialLayout="@layout/appwidget_week" …
Run Code Online (Sandbox Code Playgroud)

android android-appwidget

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

Remoteview中的ViewFlipper showNext()和showPrevious()无法正常工作

我正在一个项目中工作,我需要在Notification栏的Remoteview中使用ViewFlipper视图.目前我正面临着showNext()和showPreview()的问题.但不幸的是,当我调用按钮时,不会调用showNext()和showPreview().我也发布了我的代码供您参考.如果我的问题不明确,请帮助我在哪里犯错误并纠正我.

 private Notification setCustomViewNotification() {

        // Creates an explicit intent for an ResultActivity to receive.
        Intent resultIntent = new Intent(this, ResultActivity.class);

        // This ensures that the back button follows the recommended convention for the back key.
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

        // Adds the back stack for the Intent (but not the Intent itself)
        stackBuilder.addParentStack(ResultActivity.class);

        // Adds the Intent that starts the Activity to the top of the stack.
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

        // Create remote view and set …
Run Code Online (Sandbox Code Playgroud)

notifications android viewflipper android-appwidget android-remoteview

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

使用Glide for AppWidget加载图像

我正在开发我的第一个应用程序小部件。除了一件事情,一切都很好。我找不到,如何使用Glide在RemoteViewsFactroy的getViewAt()方法中将图像加载到ImageView中。我总是遇到错误,因为我不得不在MainThread上遇到(AppWidgetTarget),但是我无法从RemoteViewsFactory调用新的Handler(Looper.getMainLooper())。

android android-appwidget android-appwidget-list

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