zhihu / Matisse

:fireworks: A well-designed local image and video selector for Android
Apache License 2.0
12.52k stars 2.06k forks source link

android 5.1 activity 中有 WebView 时崩溃 #702

Open mayuoy opened 4 years ago

mayuoy commented 4 years ago

在我们的一个软件中使用了 Matisse,有个 Activity 中包含了 WebView ,升级到 0.5.3-beta3 后,打开这个窗口即崩溃。 Unable to start activity ComponentInfo{com.athinkthings.note.android.phone/com.athinkthings.note.android.phone.note.NoteActivity}: android.view.InflateException: Binary XML file line #208: Error inflating class com.athinkthings.note.android.phone.webedit.WebEditView android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2428)ActivityThread.java.2428 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)ActivityThread.java.2490 android.app.ActivityThread.access$1200(ActivityThread.java:159)ActivityThread.java.159 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)ActivityThread.java.1363 android.os.Handler.dispatchMessage(Handler.java:102)Handler.java.102 android.os.Looper.loop(Looper.java:135)Looper.java.135 android.app.ActivityThread.main(ActivityThread.java:5569)ActivityThread.java.5569 java.lang.reflect.Method.invoke(Native Method)Method.java.-2 java.lang.reflect.Method.invoke(Method.java:372)Method.java.372 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)ZygoteInit.java.931 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)ZygoteInit.java.726 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2428)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)android.app.ActivityThread.access$1200(ActivityThread.java:159)android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:135)android.app.ActivityThread.main(ActivityThread.java:5569)java.lang.reflect.Method.invoke(Native Method)java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)

下载 Matisse 包,在示例程序中加入个 包含 WebView 的Activity,打开此Activity也会崩溃。

测试在 android 6.0 及以上版本正常。android 5.1 中发生错误,5.1以下版本未测试。

未找到错误原因。

谢谢你们开源的Matisse ,设计合理、好用。希望能有横排4个的选项,这样在图片很多时可以更快地概览和选择。

mayuoy commented 4 years ago

看到已有横排数量自己设置的选项,谢谢。

gyqsophila commented 4 years ago

WebView 是因为 androidx 1.1.0 在 Android 5.x 版本会闪退,可以自定义 WebView,在 5.x 版本中替换构造方法中的 context 对象:

class LollipopWebView : WebView {
    constructor(context: Context)
            : super(getFixContext(context))

    constructor(context: Context, attributes: AttributeSet)
            : super(getFixContext(context), attributes)

    constructor(context: Context, attributes: AttributeSet, defStyle: Int)
            : super(getFixContext(context), attributes, defStyle)

    companion object {
        private fun getFixContext(context: Context): Context {
            return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                context.createConfigurationContext(Configuration())
            } else context
        }
    }
}

我的最低支持版本就是 5.0,所以没有判断低边界。

其他的更换 androidx appCompact 版本我验证都是无效的。

mayuoy commented 4 years ago

谢谢,按您所属进行替换后,已经正常,非常感谢。

发件人: noreply@github.com [mailto:noreply@github.com] 代表 AlphaGao 发送时间: 2019年12月30日 10:26 收件人: zhihu/Matisse 抄送: mayuoy; Author 主题: Re: [zhihu/Matisse] android 5.1 activity 中有 WebView 时崩溃 (#702)

WebView 是因为 androidx 1.1.0 在 Android 5.x 版本会闪退,可以自定义 WebView,在 5.x 版本中替换构造方法中的 context 对象:

class LollipopWebView : WebView {

constructor(context: Context)

        : super(getFixContext(context))

constructor(context: Context, attributes: AttributeSet)

        : super(getFixContext(context), attributes)

constructor(context: Context, attributes: AttributeSet, defStyle: Int)

        : super(getFixContext(context), attributes, defStyle)

companion object {

    private fun getFixContext(context: Context): Context {

        return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

            context.createConfigurationContext(Configuration())

        } else context

    }

}

}

我的最低支持版本就是 5.0,所以没有判断低边界。

其他的更换 androidx appCompact 版本我验证都是无效的。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/zhihu/Matisse/issues/702?email_source=notifications&email_token=ABJSXNB3KA6TAH35PBM4C4LQ3FL5BA5CNFSM4JMYGHFKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHZOBPY#issuecomment-569565375 , or unsubscribe https://github.com/notifications/unsubscribe-auth/ABJSXNCIWEZ4RRJD2M7RNLDQ3FL5BANCNFSM4JMYGHFA .图像已被发件人删除。