将`data android:scheme =" file"`添加到主页小部件

时间:2014-03-22 19:19:31

标签: android android-widget

我有一个家庭小部件如下。

<receiver android:name="org.yccheok.gui.widgetMyAppWidgetProvider"
    android:exported="true" >
    <intent-filter >
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <data android:scheme="file"/>

        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
        <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
        <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
        <action android:name="android.appwidget.action.APPWIDGET_OPTIONS_CHANGED" />
    </intent-filter>

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

我希望在设备重启后外部驱动器可用时,小部件能够自行刷新。因此,这就是我添加

的原因
<data android:scheme="file"/>

但是,我意识到,在我添加<data android:scheme="file"/>后,无法再在 WIDGETS 列表中找到该小部件。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我无法在AppWidgetProvider的intent过滤器中看到带有<data>标记的小部件,但我能够创建一个新的接收器来单独处理这些动作。

在AndroidManifest.xml中:

<receiver android:name="org.yccheok.gui.widgetMyAppWidgetProvider"
    android:exported="true" >
    <intent-filter >
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
        <action android:name="android.appwidget.action.APPWIDGET_DELETED" />
        <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
        <action android:name="android.appwidget.action.APPWIDGET_OPTIONS_CHANGED" />
    </intent-filter>

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

<receiver android:name="org.yccheok.gui.MyOtherProvider"
    android:exported="true" >
    <intent-filter >
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <data android:scheme="file"/>
    </intent-filter>
</receiver>

在新类MyOtherProvider.java中:

package org.yccheok.gui.MyOtherProvider;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyOtherProvider extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();

        if (Intent.ACTION_MEDIA_MOUNTED.equals(action))
        {
            // do what you want 
            // maybe call a function in your AppWidgetProvider
        }
    }
}

此外,根据http://developer.android.com/guide/topics/appwidgets/index.html#Manifest

,您只需要在意图过滤器中包含APPWIDGET_UPDATE

希望这有帮助!