gpt4 book ai didi

android - appWidget 仅在 Lollipop 设备的启动器小部件列表中不显示

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:07 25 4
gpt4 key购买 nike

我有一个适用于 android 的应用程序,我已经在 lollipop 之前为它制作了一个 appwidget,由于某些原因,该小部件没有出现在 lollipop 中。然而,它出现在前 Lollipop 设备中。

这是我的代码:

AndroidManifest.xml

<receiver android:name=".widgets.NewsWidgetProvider"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >>
<intent-filter >
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>

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

新闻信息.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_news"
android:minHeight="72dp"
android:minWidth="300dp"
android:updatePeriodMillis="6000000" >

NewsWidgetProvider.java

public class NewsWidgetProvider extends AppWidgetProvider {
private static final String NEXT_NEWS = "NEXT_NEWS";
private static final String PREVIOUS_NEWS = "PREVIOUS_NEWS";
private static final String GO_TO_NEWS_ACTIVITY = "GO_TO_NEWS_ACTIVITY";
private final String NEWS_LIST_KEY = "newsList";
NewsItem[] news;
int currentNews=0;
Bitmap imageBitmap;
private final String CURRENT_NEWS_KEY = "currentNews";

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

startService(context);

loadItemFromSharedPreference(context);

for (int widgetId : appWidgetIds) {
setUpView(context, appWidgetManager, appWidgetIds, widgetId);
}

}


@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
loadItemFromSharedPreference(context);

if (news != null) {
if (GO_TO_NEWS_ACTIVITY.equals(intent.getAction())){
openNewsActivity(context);
}

else if (NEXT_NEWS.equals(intent.getAction())) {
if (currentNews == news.length - 1) {
Toast.makeText(context, "reached last news", Toast.LENGTH_SHORT).show();
}
else if (news.length - 1 > currentNews) {
currentNews++;
SharedPreferencesManager.putInteger(context, CURRENT_NEWS_KEY, currentNews);
loadItemFromSharedPreference(context);
setTheCurrentView(context);
}
}
else if (PREVIOUS_NEWS.equals(intent.getAction())) {
if (currentNews == 0) {
Toast.makeText(context, context.getString(R.string.last_item), Toast.LENGTH_SHORT).show();
}
else if (currentNews > 0 && news != null) {
currentNews--;
SharedPreferencesManager.putInteger(context, CURRENT_NEWS_KEY, currentNews);
loadItemFromSharedPreference(context);
setTheCurrentView(context);
}
}

}
}

private void setUpView(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, int widgetId) {
final RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_news);

remoteViews.setTextViewText(R.id.title, news==null?context.getString(R.string.wait_msg):news[currentNews].title);

remoteViews.setTextViewText(R.id.brief,news==null?"":news[currentNews].brief);
setPendingIntents(context, appWidgetIds, remoteViews);
if (news!=null) {
if (imageBitmap!=null) {
AQuery aq = new AQuery(context);
remoteViews.setImageViewBitmap(R.id.image, aq.getCachedImage(news[currentNews].imageUrl, 100));
}
else {
remoteViews.setImageViewResource(R.id.image,R.drawable.ic_launcher);
}
}
else {
remoteViews.setImageViewResource(R.id.image,R.drawable.ic_launcher);
}
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}


private void setTheCurrentView(Context context) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_news);
remoteViews.setTextViewText(R.id.title, news==null?context.getString(R.string.widget_problem_title):news[currentNews].title);
remoteViews.setTextViewText(R.id.brief,news==null?context.getString(R.string.widget_problem_breif):news[currentNews].brief);
remoteViews.setImageViewBitmap(R.id.image, imageBitmap);
ComponentName thisWidget = new ComponentName( context, NewsWidgetProvider.class );
AppWidgetManager.getInstance(context).updateAppWidget( thisWidget, remoteViews );
}

private void openNewsActivity(Context context) {
Intent o=new Intent(context, NewsActivity.class);
o.putExtra(NewsItem.EXTRA_NEWS_ITEM,news[currentNews]);
o.putExtra(NewsItem.EXTRA_NEWS_SOURCE_IS_PUSH_OR_WIDGET,true);
o.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(o);
}

private void setPendingIntents(Context context, int[] appWidgetIds, RemoteViews remoteViews) {
remoteViews.setOnClickPendingIntent(R.id.next_news, getPendingSelfIntent(context, NEXT_NEWS, appWidgetIds));
remoteViews.setOnClickPendingIntent(R.id.previous_news,getPendingSelfIntent(context,PREVIOUS_NEWS,appWidgetIds));
remoteViews.setOnClickPendingIntent(R.id.title,getPendingSelfIntent(context,GO_TO_NEWS_ACTIVITY,appWidgetIds));
remoteViews.setOnClickPendingIntent(R.id.brief,getPendingSelfIntent(context,GO_TO_NEWS_ACTIVITY,appWidgetIds));
remoteViews.setOnClickPendingIntent(R.id.image,getPendingSelfIntent(context,GO_TO_NEWS_ACTIVITY,appWidgetIds));
}

protected PendingIntent getPendingSelfIntent(Context context, String action,int[] appWidgetIds) {
Intent intent = new Intent(context, getClass());
intent.setAction(action);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, 0);
return pendingIntent;
}
private void loadItemFromSharedPreference(Context context) {

currentNews=SharedPreferencesManager.getInteger(context, CURRENT_NEWS_KEY, 0);
news=SharedPreferencesManager.getObject(context, NEWS_LIST_KEY,NewsItem[].class);
AQuery aq = new AQuery(context);
imageBitmap= news == null ? BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher) : aq.getCachedImage(news[currentNews].imageUrl,200);
}

private void startService(Context context) {
Intent broadcastIntent = new Intent(context, NewsWidgetService.class );
//only start service if news is null
if (SharedPreferencesManager.getObject(context, NEWS_LIST_KEY, NewsItem[].class)==null)
context.startService(broadcastIntent);
}

代码在 (kitkat,jelly...) 中有效,但在 lollipop 中无效

我错过了什么吗?

最佳答案

我遇到了同样的问题 - 我通过向 appwidget-provider 添加额外的参数 android:widgetCategory="home_screen" 来修复它:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="40dp"
android:updatePeriodMillis="86400000"
android:configure="com.example.activities.ConfigurationActivity"
android:previewImage="@drawable/ic_launcher"
android:initialLayout="@layout/widget_layout"
android:widgetCategory="home_screen"
android:resizeMode="none">
</appwidget-provider>

关于android - appWidget 仅在 Lollipop 设备的启动器小部件列表中不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com