Articles of android o

Android vibrate已弃用。 如何在Android> = API 26中使用VibrationEffect?

我正在使用Android的VIBRATOR_SERVICE为按键触摸提供触觉反馈。 ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300); Android Studio告诉我警告方法vibrate(interval)已弃用我应该使用VibrationEffect for API> 23。 所以我使用了VibrationEffect的方法createOneShot ,它采用2个参数:间隔和幅度。 我试着寻找它,但不知道要传递什么作为amplitude ,任何人都知道如何使用它? 更新添加的代码 // Vibrate for 150 milliseconds private void shakeItBaby() { if (Build.VERSION.SDK_INT >= 26) { ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150,10)); } else { ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150); } }

Android支持库27,片段更新?

自从我将项目更新到SDK版本27并将支持库的gradle插件更新到版本27.0.0我需要更改我的代码。 使用26.1.0我可以在我的Fragment ( android.support.v4.app )中使用getContext() (使用Kotlin context )并且我没有可空性问题,但是因为我使用Kotlin我遇到了版本27.0.0的问题,我的所有context调用都不再起作用了,我需要一个安全操作符,就像context!!一样context!! ,但是因为我个人觉得每次我做自己的工作都是一种喧嚣 override fun getContext() = super.getContext()!! 改变的另一件事(突然,这就是我要问的原因)是onCreateView()和onViewCreated() 。 在onCreateView ,inflater不再是null,所以我需要更改我的函数签名以正确覆盖onCreateView(inflater: LayoutInflater?…)到onCreateView(inflater: LayoutInflater…)并且对于createdView参数也是createdView 。 onViewCreated 。 所以现在我想知道为什么,特别是(对于Kotlin)非常丑陋的getContext()更改已经完成并转向https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html 。 但等等,显然他们没有改变它? 所以现在我的问题是,如果我做错了什么或者他们是否真的改变了它,如果是这样,我可能会问他们为什么? 顺便说一句,同样适用于getActivity() ,我认为添加了mHost == null检查, getActivity方法甚至是最终的,所以我不能在那里使用我的解决方法,这使得它非常难看。 实际上在源文件中方法看起来是一样的,但是26.1.0有Kotlin返回typesContext! 和27.0.0返回typesContext? 。

在Android Oreo 8.x中更改WiFi热点的SSID和密码

在我的Android应用程序中,我使用以下代码片段: @RequiresApi(api = Build.VERSION_CODES.O) private void turnOnHotspot(){ WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); manager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback(){ @Override public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) { super.onStarted(reservation); Log.d(TAG, “Wifi Hotspot is on now”); } @Override public void onStopped() { super.onStopped(); Log.d(TAG, “onStopped: “); } @Override public void onFailed(int reason) { super.onFailed(reason); Log.d(TAG, “onFailed: “); } },new Handler()); } 这段代码创建了一个名为“AndroidShare_1234”的热点。 对于我的项目,我需要能够为此热点设置密码和SSID,但是我找不到这样做的方法。 我想创建一个像MyHotspot这样的SSID和自定义密码的热点。 […]

Android O – 旧的启动前台服务仍然有效吗?

因此,对于Android O,如果您希望每小时只接收一些位置更新,则需要将您的服务作为前台服务运行。 我注意到用于启动前台服务的旧方法似乎确实在O上工作。即 startForeground(NOTIFICATION_ID, getNotification()); 根据此处的行为更改指南: https : //developer.android.com/preview/behavior-changes.html NotificationManager.startServiceInForeground()方法启动前台服务。 启动前台服务的旧方法不再有效。 虽然新方法仅在定位O时有效,但似乎旧方法似乎仍适用于O设备,无论是否针对O. 编辑包含示例: Google示例项目LocationUpdatesForegroundService实际上有一个工作示例,您可以在其中直接查看问题。 https://github.com/googlesamples/android-play-location/tree/master/LocationUpdatesForegroundService 无论是针对API级别25进行定位和编译,还是针对O进行编译(如下所示: https : //developer.android.com/preview/migration.html#uya ),startForeground方法似乎都没有问题。 所以,重现: 按照上一个链接中的说明配置app gradle 打开应用程序 请求位置更新 关闭应用程序(通过后退按钮或主页按钮) 服务正在前台运行(通知阴影中的图标显示)。 即使在运行O的设备上,位置更新也会按预期(每10秒)完成。我在这里缺少什么?

奥利奥 – 前景服务不显示前景通知

到目前为止,我已经调整了我的代码以使用ContextCompat.startForegroundService(context, intentService); 开始我的服务。 这样,它适用于android <26和android 26(Oreo)。 我仍然看到一个区别,在android oreo我没有看到我的自定义前景通知(我只看到“应用程序在后台运行”通知)。 我还需要调整任何东西吗? 我的服务看起来像这样: public class BaseOverlayService extends Service { @Override public void onCreate() { super.onCreate(); moveToForeground(); } private void moveToForeground() { Notification notification = …; super.startForeground(NOTIFICATION_ID, notification); } } 官方的例子 此示例( https://github.com/googlesamples/android-play-location/blob/master/LocationUpdatesForegroundService/app/src/main/java/com/google/android/gms/location/sample/locationupdatesforegroundservice/LocationUpdatesService.java #L200 )显示为注释,我应该使用以下,但startServiceInForeground不存在… if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) { NotificationManager mNotificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)); mNotificationManager.startServiceInForeground(new Intent(this, BaseOverlayService.class), NOTIFICATION_ID, […]

在Android 8.1 API 27上,通知不会显示

我在Android 8.1 API 27上获得了Toast: 程序包“my_package_name”的开发人员警告 无法在…上发布通知 Logcat包含下一个字符串: 通知:对于卷控制以外的操作,不推荐使用流types W / Notification:请参阅setSound()的文档,了解如何使用android.media.AudioAttributes来限定播放用例 E / NotificationService:找不到pkg = my_package_name的频道 Toast和Logcat中的完整信息可以帮助解决此问题。

具有boot_completed的运行时exceptionAndroid O.

我正在尝试在我的BOOT_COMPLETED接收器中启动IntentService,但在Android O(API 26)中,我得到: java.lang.RuntimeException: java.lang.IllegalStateException: Not allowed to start service Intent { act=intent.action.update cmp=packageName.services.OwnService }: app is in background (消息在一行中,但这样更易读) 我怎么能以正确的方式做到这一点?

禁用应用程序的Android O自动填充服务

Android O具有支持字段自动填充的function。 有什么办法可以为特定的应用程序禁用它。 那是我想强制我的应用程序不使用自动填充服务。 可能吗 ? 要阻止整个活动的自动填充,请在活动的onCreate()中使用: getWindow() .getDecorView() .setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS); 有没有比这更好的方法?

Android O中的NotificationChannel问题

当使用Android Messages ver 2.3.063发送彩信时,我正在举报“开发人员警告包com.google.android.apps.messaging”。 在日志中 08-12 16:57:52.368 7661 7682 W Notification: Use of stream types is deprecated for operations other than volume control 08-12 16:57:52.368 7661 7682 W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case 08-12 16:57:52.369 1604 3146 E NotificationService: No Channel […]

为什么Android O失败并且“不属于这个FragmentManager!”

我已将我的应用程序迁移到Android Studio 3中的Android O. 在Android O模拟器上运行我的所有dialogFragments现在都失败了: – java.lang.IllegalStateException: Fragment MyDialogFragment{43ccf50 #2 MyDialogFragment} declared target fragment SettingsFragment{ceed549 #0 id=0x7f0f0142 android:switcher:2131689794:0} that does not belong to this FragmentManager! at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1316) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1624) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1689) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2470) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2260) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2213) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2122) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:746) at android.os.Handler.handleCallback(Handler.java:769) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6535) at java.lang.reflect.Method.invoke(Native Method) […]