问题标签 [android-8.1-oreo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1046 浏览

android - Android 开发人员的可下载字体和“Chrome 已停止”错误

作为 Oreo 和支持库中新的可下载字体支持的一部分,我已经开始将这些功能整合到我开发的应用程序中。第一个应用程序很成功 - 简单的应用程序,只有几个活动。第二个应用程序没有成功。添加可下载字体后(基于此资源:https ://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html )我在启动活动时遇到此错误:

该应用程序不会崩溃,但会出现两次弹出窗口,说明“Chrome 已停止” - 再次打开应用程序或发送反馈。

基于堆栈跟踪,资源 ID#0x7f030030是 R.java 中的以下条目(我期望):

我相信我已经确定了错误的原因 - 再次,错误状态 Chrome 有问题,但这发生在我的应用程序中:

  • 活动的布局包含一个TextView属性autoLink为“web”、“map”或“all”。
  • 我根据上面引用的文档在清单中预加载字体。

消除清单中的预加载声明或删除autoLink属性可以解决问题。TextViews不使用“web”、“map”或“all”作为autoLink属性不会产生错误(“phone”可以正常工作,因为它不是基于 Web 的意图)。显然,两者都不是理想的解决方案。这仅在应用程序首次启动时发生。

同样,第一个应用程序在使用相同的字体、在清单中预加载并使用 autoLink 属性时运行良好。但是,工作应用程序和非工作应用程序之间存在差异:

  • 非工作应用程序是一个大型应用程序,因此它使用 multidex 库,而工作应用程序不使用。
  • 非工作应用程序已本地化并为多种设备设计,因此它包括英语和德语values目录以及与屏幕大小相关的values目录。工作应用程序不使用多个values资源文件夹。

为了解决这个问题,我尝试了以下方法:

  • 考虑到 ResourceID 与某些东西冲突,我为字体数组创建了一个全新的资源,它创建了一个新的 ID。仍然出现错误。
  • 将字体数组 XML 文件添加到values项目中的所有文件夹,无论屏幕大小或本地化。仍然出现错误。
  • 尝试了不同的字体,只有一种字体。仍然出现错误。
  • 从 中删除了“web”、“map”和“all”autoLinkTextViews。错误消失了。
  • 从清单中删除了preload_fonts元标记。错误消失了。

我发现了一个与这个问题有点相关的问题跟踪器(我是跟踪器上最近提交的,但是在我完全理解问题的复杂性之前):https ://issuetracker.google.com/u/1/issues /65575496

我已经在以下设备上测试了生成错误的应用程序,并且“Chrome 已停止”错误仅出现在 Oreo 设备上。“简单”的应用程序适用于所有设备,没有报告错误。

  • Pixel 2 XL,8.1.0 - 错误
  • Nexus 5X,8.1.0 - 错误
  • Nexus 6、7.1.1 - 任何一个应用程序都没有错误

这两个应用程序都有以下 gradle 配置:

是否有解决此问题的方法(其他不预加载字体或使用 web、地图或所有 autoLink 属性)或者这与前面提到的问题跟踪器有关?

0 投票
1 回答
1969 浏览

android - 如何在 Android O 中显示来自后台服务的推送通知 // 如何正确使用 startForeground()

我正在尝试显示由 GCM 消息触发的推送通知。广播接收器在后台接收 GCM 消息,但未显示推送通知。

为了演示目的,我缩小了我的代码:

BroadcastReceiver(记录告诉我 onReceive() 被调用)

应该触发通知的 Intent。记录说 onHandleIntent() 被调用。

我的 AndroidManifest.xml:

当应用程序在前台接收到 GCM 事件时,日志显示:

当应用程序在后台接收到 GCM 事件时,日志显示:

当然,不会出现任何通知。我想我正在使用startForeground(..)并且startForegroundService(...)以错误的方式使用,但我目前没有想法。

0 投票
3 回答
6102 浏览

android - 使用 PendingIntent 的应用程序小部件中的 Oreo 服务未启动

我正在使用 Android 应用小部件。我正在创建一个PendingIntent对象并在方法中使用它RemoteViews#setOnClickPendingIntent()。这是待定意图:

上面的代码在 Android Oreo 之前按预期工作。但是,在 Android Oreo 中,如果应用程序从最近浏览器中滑开,它将不再启动该服务。(不再活动)。不PendingIntent排除在奥利奥的后台执行限制中吗?

出于测试目的,我替换getServicegetForegroundServiceService仍未启动。两种方法都在日志中显示以下消息:

为什么Service即使在使用时也没有启动getForegroundService?我在运行 Android 8.1.0 的 Nexus 6P 上对此进行了测试。

0 投票
0 回答
530 浏览

android - 在 Oreo 中使用 JobIntentSerivce 调度任务

我已经绝望了,两天来我正在寻找如何在后台为android O安排服务,但没有任何效果,每周一次Alarm manger,我读了很多文章,我认为JS中的所有解决方案都不是很多关于它的问题,因为它的新操作系统和主题。我知道 android O 进行优化并杀死/销毁服务,但我知道如果我使用 JobIntentService 调度服务,它应该可以工作。这是我的代码

显现:

在此之后我创建了 JobScheduler:

求职意向服务

我也尝试enqueueWork在我的JobInfo课堂上设置它,但它不起作用。此外,我读到没有必要将 JobScheduler 和 jobIntentService 结合在一起,可以在 上安排服务enqueueWork,但我真的试图找到解决方案,但我真的没有找到任何适用于谷歌的示例。在控制台上,我有一次看到它可以工作,但什么也没有。

0 投票
1 回答
451 浏览

android - 奥利奥中缺少闹钟功能的通知

我一直在通过 Anna Xu 的youtube 教程制作闹钟

她最终将她的代码保留在 If 语句中,它似乎可以点击并调出她的应用程序。我已经根据在 Pixel XL 上搜索 Oreo 的修复程序进行了修改。这是我到目前为止所拥有的:

这会在警报响起时弹出通知,但点击并不会弹出应用程序,实际上我认为您根本无法点击它,您只能将其滑开。我只想能够单击通知将应用程序带到前台。我是 Java 和 Android Studio 的超级新手,现在奥利奥系统闹钟不可信,这一切都是必要的提示。任何帮助都会很棒。

0 投票
0 回答
328 浏览

android - 在 Android O 上显示锁定屏幕对话框

在奥利奥之前,我能够成功地将对话框添加到 API 的锁定屏幕上。谷歌似乎不再允许TYPE_SYSTEM_ERROR从此 API 开始使用该标志。

有什么办法可以在 Android O 的锁屏上显示对话框?


适用于 < Android O 的代码

0 投票
0 回答
1433 浏览

android - 奥利奥后台位置更新

我一直在努力更新我正在开发的应用程序以使用新的 FusedLocationProviderClient 并在应用程序未使用时请求后台位置更新。我最近还更新了这个应用程序以针对 sdk 27​​,但是我无法保持我以前使用的服务活着来检查这些位置更新。

总结一下我想要完成的工作,这个应用程序允许用户保存来自不同商家的多个优惠。这些商家中的每一个都可以在全国拥有多个位置,并且该应用程序允许用户在他们保存的商家之一附近时收到通知。该应用程序为用户当前位置一定半径内的所有已保存商家位置设置地理围栏,但如果用户大幅移动以丢弃旧地理围栏并为更靠近更新位置的商家位置创建新地理围栏,该应用程序需要接收位置更新。

在切换到目标 sdk 27​​ 并使用 FusedLocationProviderClient 之前,该应用程序使用 LocationServices FusedLocationProviderApi 在粘性后台​​服务中请求位置更新,该服务在用户在其应用程序中启用基于位置的提醒时启动。这个想法是让该服务在后台连续运行,并在使用 FusedLocationProviderApi 指定的位置更新设置触发服务侦听器中的 onLocationChanged 事件时重新绘制地理围栏。

使用新的 SDK,一旦应用程序被认为处于“空闲”状态,后台服务就会停止。拥有定期接收位置更新的后台服务(即不必向用户显示前台消息/通知的服务)的最佳做法/建议是什么?有没有办法使用 FusedLocationProviderClient 的 requestLocationUpdates 方法来完成此操作,或者使用带有 FusedLocationProviderClient 的 getLastLocation 回调的周期性 FirebaseJobDispatcher 来更新地理围栏会更好吗?还有其他解决方案吗?

0 投票
0 回答
2076 浏览

android - Android Oreo:保持启动的后台服务处于活动状态而不将其设置为前台(但有通知)?

我正在开发一个媒体应用程序。我想知道如何保持我的应用在 Oreo 之前的一些旧行为,例如,即使服务不再设置为前台,通知和服务(用于播放)也会挂在那里。

我们在播放开始时调用 startService(MediaPlaybackService.class) 来启动服务,然后创建一个通知并在服务上调用 startForeground()。到目前为止一切顺利 - 如果用户退出应用程序,用户仍将在后台播放媒体,并且可以通过通知控制播放。

当用户暂停播放时,我们调用 stopForeground(false) 使通知消失。问题来了,从Android Oreo开始,系统会阻止启动非前台服务并停止正在运行的服务。在我的情况下,在暂停播放时,服务变为非前台并且会被系统停止。并且由于它就像一个正确的 stopSelf() 调用,将 onStartCommand() 设置为返回“START_STICKY”似乎无助于向服务提供另一个启动调用,即使这样做也很可能无法工作,因为应用程序仍在在背景中。

看起来它适用于 Spotify - 当播放暂停时,他们的通知会无限期地保留;并且通知是可忽略的,所以我认为它没有设置为前台。想知道它对 Spotify 是如何工作的吗?

这是一些示例代码:

0 投票
1 回答
258 浏览

android - 奥利奥中的布局内容重叠

我有两个子布局ConstraintLayout(一个在另一个之上)。它在除 Android 8.1 (Android O) 之外的所有 Android 版本中首先显示第二个布局,其中第二个布局隐藏在第一个布局后面。

是否需要在 Android O 中进行任何更改才能获得与其他响应相同的响应?

理想情况 安卓系统

0 投票
1 回答
3485 浏览

android - Android Oreo 8.0+ 禁用网络权限问题

我正在构建一个 Cordova 应用程序,该应用程序需要在 Android 上访问 WiFi 并禁用当前连接的网络,以防止自动断开与我正在连接的网络的连接(因为没有互联网)。

问题是,在 Android Oreo 8.0+ 上进行测试时,我遇到了这个错误,adb logcat我不知道我需要做什么来解决这个问题:

这些是清单中列出的权限:

我在这篇文章中找到的OVERRIDE_WIFI_CONFIG烫发,但这似乎对我的具体情况没有帮助:更改 Android 热点设置

我在这个文件中发现了这个特定的错误: https ://android.googlesource.com/platform/frameworks/opt/net/wifi/+/master/service/java/com/android/server/wifi/WifiConfigManager.java# 984

canModifyNetwork我在这里找到了 哪些调用: https ://android.googlesource.com/platform/frameworks/opt/net/wifi/+/master/service/java/com/android/server/wifi/WifiConfigManager.java#651

任何对 Android 更有经验的人可以帮助我解决这个问题,以及需要做什么才能让我的应用禁用网络?

这是否意味着如果不是由应用程序创建的网络,则不允许应用程序禁用网络?请帮助我不知道从哪里开始!

我也确实找到了这篇文章,它引用了 6.0,但是我们基本上完全无法禁用我们没有创建的网络,这是真的吗?如果该 SSID 已有另一个 WifiConfiguration,则 Android 6.0 无法添加 WifiConfiguration