我有一个家庭小部件如下。
<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 列表中找到该小部件。
答案 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希望这有帮助!