美文网首页
Android O 8.0适配指南

Android O 8.0适配指南

作者: adustdu2015 | 来源:发表于2018-12-22 15:15 被阅读0次

    1. 通知栏

    Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。
    用户界面将通知渠道称之为通知类别。
    针对 8.0 的应用,创建通知前需要创建渠道,创建通知时需要传入 channelId
    否则通知将不会显示。示例代码如下:

    // 创建通知渠道
    private void initNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = mContext.getString(R.string.app_name);
            NotificationChannel channel = new NotificationChannel(mChannelId, name, NotificationManager.IMPORTANCE_DEFAULT);
            mNotificationManager.createNotificationChannel(channel);
        }
    }
    // 创建通知传入channelId
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NotificationBarManager.getInstance().getChannelId());
    

    2. 后台执行限制

    如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一个 IllegalStateException。
    

    我们无法得知系统如何判断是否允许应用创建后台服务,所以我们目前只能简单 try-catch startService(),保证应用不会 crash,示例代码:

    Intent intent = new Intent(getApplicationContext(), InitializeService.class);
    intent.setAction(InitializeService.INITIALIZE_ACTION);
    intent.putExtra(InitializeService.EXTRA_APP_INITIALIZE, appInitialize);
    ServiceUtils.safeStartService(mApplication, intent);
    
    public static void safeStartService(Context context, Intent intent) {
        try { 
            context.startService(intent);
        } catch (Throwable th) {
            DebugLog.i("service", "start service: " + intent.getComponent() + "error: " + th);
            ExceptionUtils.printExceptionTrace(th);
        }
    }
    
    

    3. 允许安装未知来源应用

    针对 8.0 的应用需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限,否则将无法进行应用内升级。
    

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

    4. 主题的 Activity 设置屏幕方向

    针对 8.0 的应用,设置了透明主题的Activity,再设置屏幕方向,代码如下:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowIsTranslucent">true</item>
    </style>
    
    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme">
    </activity>
    

    将会抛出以下异常:
    java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

    6. 隐式广播

    由于 Android 8.0 引入了新的广播接收器限制,因此您应该移除所有为隐式广播 Intent 注册的广播接收器。将它们留在原位并不会在构建时或运行时令应用失效,但当应用运行在 Android 8.0 上时它们不起任何作用。

    显式广播 Intent(只有您的应用可以响应的 Intent)在 Android 8.0 上仍以相同方式工作。

    这个新增限制有一些例外情况。如需查看在以 Android 8.0 为目标平台的应用中仍然有效的隐式广播的列表,请参阅隐式广播例外。
    需要检查应用静态注册的隐式广播,需要改为动态注册。

    相关文章

      网友评论

          本文标题:Android O 8.0适配指南

          本文链接:https://www.haomeiwen.com/subject/nsujoftx.html