- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个适用于 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/
我使用工具栏是为了在我的应用程序中进行 Material 设计。一切正常,但除了更改菜单项文本颜色时,我完全无法接受该解决方案。我还张贴了我在申请中使用的文本和代码的屏幕截图,供您引用。我尝试了几种替
看起来 FloatingActionButton 在 Android 4.0 和 Lollipop 上无法正常工作。正如您在下图中看到的那样,在 Android Lollipo 上,阴影缺失,而在 A
SDK 升级到 Android 5 后,我无法使用 Intel 硬件加速执行管理器: $ android-sdk-macosx/tools/emulator -avd AVD_for_LowMemor
SDK升级到Android 5后,无法使用Intel Hardware Accelerated Execution Manager: $ android-sdk-macosx/tools/emulat
我有不同 draw9patch png 作为背景的按钮。目前按钮由 selector 控制,看起来像这样: 对于 Android Lollipop,他们有一个用于触摸效果的
我尝试在 Pre-Lollipop 设备上运行我的应用程序。但是这段代码向我显示了 Pre-Lolliop 和 Lollipop 设备的相同错误。 如果我将“android:”添加到样式中(如样式 2
我实现了一个自定义的 SurfaceView 来绘制相机预览,并在其上完成了所有捕获和手动对焦操作。它在 Pre-Lolipop 设备上运行良好,但问题是它在 Lollipop 设备上崩溃。 发生的最
风格 @color/my_primary_color @color/my_primary_dark_color @color/accent 布局
我想在 Lollipop 设备中显示较旧的时间选择器(如 Lollipop 设备之前的时间选择器)。可以 这是可能的。 最佳答案 您可以通过将 timePickerMode 属性设置为“spinner
嗨,所以我有点困惑,想知道是否有人能指出我正确的方向。 在 Lollipop 和 pre-lollipop 上使用 Google Play 商店 您会在 Lollipop 上看到可选择的 View 具
如果我们希望使用 Material Design 的应用同时支持 Lollipop 和 Lollipop 之前的设备,以下哪种方法是正确的? 单独使用 Android 支持库:仅对整个应用程序使用支持
我正在使用 appcompat/support-v7 中引入的新工具栏小部件。我想根据用户是否向上/向下滚动页面来隐藏/显示工具栏,就像在新的 Google Playstore 应用程序或 NewsS
我的数据库中有一个 .mhtml 文件作为字节数组。我写了下面的代码,它在 Lollipop 之前的设备上运行良好。但它不适用于 Lollipop 和棉花糖。 代码:- String p
根据标题,我能够在下面的 Lollipop 中成功读取/写入数据,但在 Lollipop 中多次读取/写入失败。 这就是我读/写数据的方式: boolean isRead= getmBluetooth
我刚刚在 Android Studio 上安装了 Android 5,并在模拟器上进行了第一次运行。我发现“API Demos”应用程序非常有趣,我想找到代码。我说的是这个应用程序: 有人知道我在哪里
我正在关注 this tutorial在 Android Material Design 中使用颜色(我的 ActionBar 和 StatusBar)。我确实按照教程进行操作,但没有反射(refle
在我的应用程序中,用户可以通过它调用任何号码,我正在启动蓝牙 audioManager.setBluetoothScoOn(true); audioManager.startBluetoothSco(
我正在我的 android 应用程序中实现 Google map API v2。该应用程序在所有设备上都可以正常工作,但在 Lollipop 设备上却不行。应用程序在 Lollipop 中崩溃。我确实
我正在开发一个项目,其中有一个日期选择器。我正在尝试为其设置最大日期和最短日期。最短日期是今天之后 1 天,最大日期是今天之后 11 天。但问题是在 Lollipop 设备中,最后一个最大日期显示为可
我正在使用嵌入式无线系统,它以定义的时间间隔生成数据包。目的是检测设备/系统何时重新启动。为此,我读到 Lollipop 序列编号是最适合此目的的编号方案。 “在此编号方案中,序列号从负值开始,增加直
我是一名优秀的程序员,十分优秀!