Ich habe eine App für Android, die ich bereits ein appwidget dafür vor Lollipop gemacht, aus bestimmten Gründen erscheint das Widget nicht in Lollipop. Es zeigt sich jedoch in den Pre-Lollipop-Geräten.appWidget nicht in Launcher-Widget-Liste nur in Lollipop-Geräten
Hier ist mein Code:
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>
news_info.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);
}
}
Der Code arbeitet in (kitkat, Gelee ...), aber es funktioniert nicht in Lutscher
Bin ich etwas fehlt?
Ich habe den gleichen Fehler auf Genymotion 4.3 Verwendung von Google Now Launcher, die die Standard-Launcher in Lollipop ist, so dass das Problem innerhalb der Abschuß liegt und nicht Lollipop –
per se sehe ich die gleiche Problem mit Whatsapp und der Facebook-App, aber seltsamerweise nicht mit Evernote –
Was ist das Gerät, auf dem Sie Lollipop laufen und versuchen, Ihr Widget auf zu zeigen? – Libelle