【问题标题】:Homescreen Widget doesn't get installed未安装主屏幕小部件
【发布时间】:2013-10-01 22:39:09
【问题描述】:

我有一个简单的应用程序,我想要一个主屏幕小部件(一个图像),它可以从其中一个活动中运行应用程序,而不是主活动。 我在编译、运行应用程序或安装它时没有错误,但小部件既没有安装在我用于测试的平板电脑或手机中。 所以...这就是我正在做的事情。

widget_info.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/widget_layout" 
    android:minHeight="146dp"
    android:minWidth="146dp"
    android:configure=".MyWidgetProvider"
    android:widgetCategory="home_screen|keyguard"
    android:previewImage="@drawable/ic_launcher" 
    android:updatePeriodMillis="3000" >    
</appwidget-provider>

widget_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:orientation="horizontal"
    android:layout_width="146dp"
    android:layout_height="146dp"
    android:layout_margin="8dip"
    android:background="@drawable/ic_launcher" >    
</LinearLayout> 

MyWidgetProvider.java

package com.project;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;

public class MyWidgetProvider extends AppWidgetProvider {


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


      RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);

      ComponentName myWidget = new ComponentName(context,MyWidgetProvider.class);
      AppWidgetManager manager = AppWidgetManager.getInstance(context);
      manager.updateAppWidget(myWidget, remoteViews);


  }
} 

这是AndroidManifest.xml中Application内部的接收器

<receiver android:name="Detente" >
            <intent-filter>
                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                 <action android:name="android.appwidget.action.ACTION_WIDGET_RECEIVER"/>
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
 </receiver> 

我是否需要添加任何权限或类似的东西,或者这个“android:installLocation="preferExternal"”可能导致冲突?

(我在 Lenovo Tab whit ICS 和 LG 3D-Max with GB 上运行测试)

我明天需要这个,请帮忙。 :D

【问题讨论】:

  • 当您尝试在设备上添加小部件时,您的 logcat 会说什么吗?
  • 我是。尝试通过在主屏幕中点击来添加小部件,但它不在列表中

标签: android widget installation homescreen


【解决方案1】:

问题可能是你没有正确声明你的 AppWidgetProvider。

根据App Widgets 指南,

该元素需要 android:name 属性,该属性 指定 App Widget 使用的 AppWidgetProvider。

您的 AppWidgetProvider 名为 MyWidgetProvider,但您的清单显示为 &lt;receiver android:name="Detente" &gt;。将其更改为 &lt;receiver android:name="MyWidgetProvider" &gt; 可能会解决您的问题。

我也没有在AppWidgetManager documentation 中看到ACTION_WIDGET_RECEIVER。那个是从哪里来的?文档表明只需要APPWIDGET_UPDATE。

【讨论】:

  • 已更改,但列表中仍缺少该小部件。
  • 我已经更新了我的答案,包括关于您的 ACTION_WIDGET_RECEIVER 的注释,这也可能导致问题。
  • 您有配置活动和/或启动器活动吗? Check this question 了解其他一些可能的解决方案。
  • 感谢您的尝试,但是是的,我有不止一项活动,而且它们都运行良好。这些应用程序运行良好,没有错误,没有 logcat 红线,当然小部件列表中也没有应用小部件。
【解决方案2】:

就像将应用程序移动到设备一样简单......因此它被安装到 SD 中

 android:installLocation="preferExternal"

请记住,只有当应用程序位于内存中时,才能安装小部件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多