如何创建可以进入主屏幕文件夹和主页行(Dock)的Android AppWidget?

时间:2014-03-10 15:25:34

标签: android android-launcher android-appwidget

我找到了几个Android应用程序示例,这些应用程序具有可放入主屏幕文件夹的简单小部件以及主屏幕上的底部持久行。例如,Gmail标签小部件或Dropbox文件夹小部件。在我尝试制作一个类似的小部件 - 下面带有图标和文本视图的单个单元格时,小部件只能在主屏幕上单独显示。

如何制作可以放入主屏幕文件夹或主页行的最简单的小部件,就像普通的应用程序图标一样?

我正在寻找的实际上不是一个小部件,而是一个应用程序图标,它会以某种方式包含在小部件列表中(但不会在应用程序列表中添加第二个应用程序图标)?

编辑:

非常感谢Kuffs让我朝着正确的方向前进。

关键在于Kuffs在清单中指出的内容:

...
<intent-filter>
    <action android:name="android.intent.action.CREATE_SHORTCUT" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
...

正如Kuffs所提到的那样,只有你的应用程序才能在小部件列表中输入一个条目。优秀的工作团队。

2 个答案:

答案 0 :(得分:3)

窗口小部件只能放在主屏幕上。它们无法添加到主屏幕上的扩展坞中。只有图标在这里。

您需要添加快捷方式。

向清单添加相关权限。

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

创建一个活动,创建快捷方式并将其添加到清单中,如下例所示。

e.g

    <activity
        android:name=".ShortcutActivity"
        android:label="@string/app_name" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.CREATE_SHORTCUT" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

如果您现在运行此应用,您将有机会像Gmail / Dropbox应用一样添加您的快捷方式(小部件屏幕将列出您​​的新快捷方式创建活动)。当然,您的活动实际上应该添加有用的快捷方式。

活动将由具有startActivityForResult()的操作系统启动,因此它将在返回的意图内部期望一个意图(由操作系统在onActivityResult调用中使用)。此信息可在此处找到:https://stackoverflow.com/a/11449443/1399483

因此,创建一个创建快捷方式的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent i= new Intent();
    Intent shortcutActivity = new Intent(this, ActivityToLaunch.class);

    i.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutActivity);
    i.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut Title");
    i.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this, R.drawable.shortcut_icon));
    setResult(RESULT_OK, i);
    finish();
 }

要使用自定义图标而不是可绘制资源,请使用以下内容替换额外的EXTRA_SHORTCUT_ICON_RESOURCE

Bitmap bm; // Set to the image you want to use
i.putExtra(Intent.EXTRA_SHORTCUT_ICON, bm);

答案 1 :(得分:0)

嗯,好问题!小部件即使1x1也不能放在文件夹或底座中,这当然是真的。

也许它确实不是在选择标签/文件夹后创建的小部件,而是创建了一个快捷方式。 “小部件”是一种快捷方式,将快捷方式放在主屏幕上的方法是通过(选择标签/文件夹)“小部件”。

使用右侧permission and code,您可以从源代码创建快捷方式。