Android8.0爬坑

作者: hahauha | 来源:发表于2018-03-01 15:47 被阅读2209次

问题一:微信分享

遇到“Only fullscreen opaque activities can request orientation”报错处理

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hengtiansoft.love_security_edu/com.hengtiansoft.love_security_edu.wxapi.WXEntryActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3173)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3268)
    at android.app.ActivityThread.-wrap12(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1880)
    at android.os.Handler.dispatchMessage(Handler.java:108)
    at android.os.Looper.loop(Looper.java:166)
    at android.app.ActivityThread.main(ActivityThread.java:7358)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)
Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
    at android.app.Activity.onCreate(Activity.java:1076)
    at cn.sharesdk.wechat.utils.WechatHandlerActivity.onCreate(WechatHandlerActivity.java:30)
    at com.hengtiansoft.love_security_edu.wxapi.WXEntryActivity.onCreate(WXEntryActivity.java:36)
    at android.app.Activity.performCreate(Activity.java:7340)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3126)
    ... 9 more

解决:
1、针对分享这个问题,只需在AndroidManifest.xml中去掉activity方向的设置, android:screenOrientation="portrait"
2、其他地方报错,针对报错的activity,设置activity的theme

   <!--<style name="NoTranslucent">-->
        <!--<item name="android:windowIsTranslucent">false</item>-->
        <!--<item name="android:windowDisablePreview">true</item>-->
    <!--</style>-->

问题二:应用内apk安装更新,下载完成后app crash,不在执行安装。

原因:Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要在里面打开每个应用的未知来源的安装权限。Google这么做是为了防止一开始正经的应用后来开始通过升级来做一些不合法的事情,侵犯用户权益。
当你的应用直接适配到Android8之后,内部启动应用安装是会被阻塞的,如果不处理好这个未知来源的权限,会导致应用根本无法更新,只能去应用市场重新下载。

解决:
1、在清单文件中增加请求安装权限

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

2、申请打开未知来源权限。
3、打开未知来源授权列表,开启权限。

/**
     * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装
     */
    private void checkIsAndroidO() {
        if (Build.VERSION.SDK_INT >= 26) {
            boolean b = getPackageManager().canRequestPackageInstalls();
            if (b) {
                downloadApk();
            } else {
                //请求安装未知应用来源的权限
                final CommonDialog dialog = new CommonDialog(mContext).builder()
                        .setContent("安装应用需要打开未知来源权限,请去设置中开启权限?");
                dialog.setCanceledOnTouchOutside(false);
                dialog.setOnCancelClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                dialog.setOnConfirmClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                        ActivityCompat.requestPermissions(LaunchActivity.this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 10010);
                    }
                });

                dialog.show();
            }
        } else {
            down.downloadApk(LaunchActivity.this, mUrl, folderName,
                    apkName, apkPath, "");
        }

    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 10010:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    downloadApk();
                } else {
                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
                    startActivityForResult(intent, 10012);
                }
                break;
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 10012:
                checkIsAndroidO();
                break;

            default:
                break;
        }
    }

结合android7.0的适配方案https://www.jianshu.com/p/470359cbfb78,完美解决apk安装更新问题。
注意:开启权限之后的更新方式要android7是一样,普通安装方式没用。

参考:http://blog.csdn.net/m18860232520/article/details/78852832
参考:http://blog.csdn.net/changmu175/article/details/78906829

相关文章

  • Android8.0爬坑

    问题一:微信分享 遇到“Only fullscreen opaque activities can request...

  • android8.0采坑 Only fullscreen opa

    android8.0采坑 Only fullscreen opaque activities can reques...

  • 爬坑

    文文很郁闷,最近他遇到一件不公平的事,在他看来,这是非常非常明显的不公平。 前段时间,公司要提拔一位主管,...

  • 爬坑

    伸手要钱的日子真不好过,无论是和父母,还是和爱人,她们嘴上说的好听,一旦你伸手要了,脸色立马变得难看了起来。谈钱注...

  • 爬坑

    经过了一年左右的痛苦煎熬,最近感觉快要从去年的那种浑浑噩噩的状态中解脱出来了。催收电话打来,想接就接,不想接就挂掉...

  • 适配iPhoneX全系详解,更新Xcode10爬坑

    适配iPhoneX全系详解,更新Xcode10爬坑 适配iPhoneX全系详解,更新Xcode10爬坑

  • 坑和爬坑

    又是一个出差13天的cycle,终于在星期天的下午3点落地小盆地,跟老公一起回到家已经是要赶着物管下班前去把水费给...

  • H5移动端爬坑

    H5移动端爬坑

  • 2019-08-06

    爬不出来这个坑呢

  • 审核被拒---苹果审核请求不到数据

    我不知道大神会不会爬坑(一直特别好奇),我只知道作为小菜鸟的我永远有爬不完的坑,我常说的一句话是 我正在爬坑的路上...

网友评论

  • 扶云九霄:android:screenOrientation="portrait" 改为 android:screenOrientation="behind"就好了,不影响原有代码
    扶云九霄:@姑娘丶你命里缺我 behind:使用Activity堆栈中与该Activity之下的那个Activity的相同的方向
    姑娘丶你命里缺我:老铁,这个也能固定住竖屏的吗
  • 小_路子:刚刚遇到同样的问题,幸好楼主分享了,不然真不知道从哪查起

本文标题:Android8.0爬坑

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