- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题:
手机/模拟器锁定重复的通知更新。使模拟器在锁定后恢复响应的唯一方法是按给定顺序按 Home => Menu => Lock => Home => Menu Button。
代码:
通知推送代码:
// Set up notifcation views
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); // Get notification manager
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.service_notification);
contentView.setViewVisibility(R.id.current_error_text, View.GONE);
contentView.setViewVisibility(R.id.error_text, View.GONE);
contentView.setViewVisibility(R.id.info_error_text, View.GONE);
contentView.setViewVisibility(R.id.info_text, View.GONE);
contentView.setViewVisibility(R.id.next_check_in_text, View.VISIBLE);
contentView.setViewVisibility(R.id.current_profile_text, View.VISIBLE);
contentView.setViewVisibility(R.id.profile_name_text, View.VISIBLE);
contentView.setTextViewText(R.id.next_check_in_text, mainText);
// Set profile text now
contentView.setTextViewText(R.id.profile_name_text, miniText);
// Set up a new notification
Notification notif = new Notification(R.drawable.service_logo_small, "Service is running", System.currentTimeMillis());
notif.contentView = contentView; // Set content view
// Create and plug in the PendingIntent
Intent notifIntent = new Intent(this, EntryPointActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifIntent, 0); // Set up the Pending Intent
notif.contentIntent = pIntent;
// Now set up notification flags
notif.flags |= Notification.FLAG_NO_CLEAR;
notif.flags |= Notification.FLAG_ONGOING_EVENT;
notif.flags |= Notification.FLAG_FOREGROUND_SERVICE;
if(sp.getBoolean("UpdateLights", true)) notif.flags |= Notification.DEFAULT_LIGHTS;
if(sp.getBoolean("UpdateVibrate", true)) notif.flags |= Notification.DEFAULT_VIBRATE;
if(sp.getBoolean("UpdateSound", true)) notif.flags |= Notification.DEFAULT_SOUND;
notificationManager.notify(R.string.app_name, notif);
所有对象都存在并且项目编译完美。我没有遇到 NullPointerExceptions!
调用通知创建函数的代码:
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
if(( nextUpdateIn - System.currentTimeMillis() ) > 0) {
long milliseconds = (nextUpdateIn - System.currentTimeMillis());
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
String toShow = "Next Check In: " + minutes + " minute" + ((minutes != 1) ? "s" : "") + " " + seconds + " second" + ((seconds != 1) ? "s" : "");
pushNotification(STATE_LOADEDSUCCESSFULLY, currentProfile.getProfileName(), toShow);
} else {
currentState = STATE_RELOADING;
pushNotification(STATE_RELOADING, null, "Refreshing..");
timer.cancel();
}
}
}, 1, 999);
同样,所有对象都存在!上述过程中的通知已更新,但如上所述它会锁定模拟器和手机!
目标:
更新状态栏中的通知以基本上显示下一次刷新前的倒计时。
编辑:
我正在尝试通过SERVICE 运行这段代码,我已经尝试过运行 Android 2.2、2.3.3、4.1 的模拟器,但它们都给我同样的问题!
最佳答案
您用于显示和更新通知的代码工作正常。
在我看来,造成这种情况的唯一原因可能是同时构建了许多计时器。由于初始延迟为 1 毫秒,如果 timer.scheduleAtFixedRate()
是通过某个意外循环调用的,您可能会用数百个通知更新锁定系统。我建议在该行上放置一个断点并找出发生这种情况的原因。
我还有两个建议:
Notification
构造函数现已弃用,您可能应该考虑使用通知生成器,例如 Jake Wharton 的 NotificationCompat2 .ScheduledThreadPoolExecutor
而不是 Timer
。关于android - NotificationManager.notify 锁定手机和Emulator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13323892/
如何将 Windows Phone Emulator only Emulator 7 升级到 Emulator 8 我正在使用 Visual Studio 2010 Windows Phone 7 S
我是 WebStorm 和 React Native 的新手,在设置我的环境时遇到了一个错误,与我看到的其他帖子相比,我的环境显得独特。 客观的 我在 WebStorm 中设置了一个默认项目,我的目标
Android 模拟器目前不支持多播,但是我需要测试需要多播数据包的应用程序。我想在模拟器上做。 有没有办法在 Android Emulator 上接收多播数据包?我愿意编写一些代码作为 androi
这个问题在这里已经有了答案: Full emulation vs. full virtualization (9 个回答) 6年前关闭。 我看到它们是不同的东西,但我真的不知道为什么。 有人说:“模拟
每次我运行模拟器时,它在开始时都能正常运行,但几分钟后它就会崩溃,并给我这个错误: emulator process finished with exit code 1073740791 (0xC00
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我刚刚安装了 VS2015 Preview,然后它让我可以选择安装其他软件,包括 Android Emulator。不幸的是,公司网络在下载完成之前出现故障,因此安装失败,并且没有给我重试的选项。 在
当我运行我的应用程序代码时,我可以在控制台中看到以下条目: [2011-03-01 10:29:26 - mireader] Uploading mireader.apk onto device 'e
我刚刚安装了 VS 2015 RC 并打开了适用于 Android 的 VS 模拟器。我无法从此模拟器连接到互联网。我去了设置 - > WiFi,可以看到它已打开,但未显示为已连接到任何网络。 关闭w
我正在使用 Android Studio 2.3(最新)。直到昨天一切都很好并且工作正常,今天模拟器没有连接到数据网络。 到目前为止,我找不到任何解决方案。我的 Mac 在 Mac OS Sierra
我正在使用 android SDK 4.0.3,我正在尝试运行一个简单的程序,在该程序中,我尝试使用 Intent 从一个页面切换到另一个页面(通过将 intent 对象传递为:Intent inte
问题是 我得到“HAX 不工作并且模拟器在模拟模式下运行”,这是否与 Intel x86 Emulator Accelerator (HAXM) 安装和运行 avd 且 CPU 设置为 CPU Int
我正在用 Go 编写云函数并从 firestore 模拟器触发它们。如果我手动启动 firestore 模拟器,这会起作用: java -jar ~/.cache/firebase/emulator
我的 Nexus One 有: 设置包括“语音 识别器设置”列表中 “语音输入和输出设置”。 Google 搜索有麦克风 它旁边的按钮,所以当我触摸 它,一个对话框提示我说什么 我要搜索。 然而,在模
我最近安装了 VS 2015 RC,Android 模拟器似乎运行良好(速度非常快 :)),只是它无法连接到网络。根据 http://blogs.msdn.com/b/visualstudioalm/
Android 模拟器在使用 Google Play 商店时显示消息“您的设备与此版本不兼容”。 它适用于真实设备(或至少适用于我测试过的设备)。 这些是我的 list 权限:
这个问题已经有答案了: Error in launching AVD with AMD processor (19 个回答) 已关闭 4 年前。 我在 exteras 中丢失了 Intel 文件夹,并
这更像是 android studio 中的一个良性错误。每当我从 sleep 或 hibernate 状态唤醒计算机时,模拟器和 android studio 之间的连接不正确,我必须重新启动模拟器
我正在尝试使用路由来测试应用程序。我正在使用 Android Studio 4.0.1 和模拟器版本 30.0.26。当我播放一条路线时,它看起来像是播放第一个位置,然后在 Lat Lon 更改为路线
Visual Studio Emulator for Android (VSEA) 运行良好,直到我开始使用视频卡来支持超宽显示器。运行几分钟后,我不断收到以下错误: An OpenGL error
我是一名优秀的程序员,十分优秀!