facebook + android : 只有全屏不透明活动可以请求方向
facebook + android : Only fullscreen opaque activities can request orientation
Facebook SDK 版本 4.27.0
Android OS 版本 8.0
应用异常崩溃,这是我在 Crashlytics 上找到的跟踪日志:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.yyy/com.facebook.FacebookActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2822)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897)
at android.app.ActivityThread.-wrap11(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1598)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6563)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
at android.app.Activity.onCreate(Activity.java:986)
at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:285)
at com.facebook.FacebookActivity.onCreate(FacebookActivity.java:62)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2775)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897)
at android.app.ActivityThread.-wrap11(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1598)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6563)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
谁能帮我解决这个问题?
PS:
在Android源码中,看了987这一行,好像是这一行的罪魁祸首。
此外,在我的清单中:
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" />
删除此属性:
android:screenOrientation="portrait"
来自FacebookActivity
标签,可能会解决问题。
当我从样式中删除这个 <item name="android:windowIsTranslucent">true</item>
时,问题就解决了。
从您的样式菜单中删除此行
<item name="android:windowIsTranslucent">true</item>
已更改
<style name="AppTheme" parent="android:Theme.Translucent.NoTitleBar"></style>`
到
<style name="AppTheme" parent="android:Theme.Holo.NoActionBar.TranslucentDecor"></style>
然后移除
<item name="android:windowIsTranslucent">true</item>
根据最新的 fb 集成指南,我们不需要指定导致 android 8.0 崩溃的主题或方向。所以我们应该使用最新的 fb sdk 和他们的新设置:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
https://developers.facebook.com/docs/facebook-login/android/#manifest
在 Android O 及以后设置
时会发生此错误
android:screenOrientation="portrait"
这段代码写在Android清单文件中:
<activity
android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent"></activity>
从 manifest
文件中删除此
android:screenOrientation="portrait"
并在 setContentView
之前的 oncreate 中将以下代码添加到 activity :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
这将解决 illegalStateException
问题/
在Facebook Developer documentation中:
If you use version 5.15 or later of the Facebook SDK for Android, you
don't need to to add an activity or intent filter for Chrome Custom
Tabs. This functionality is included in the SDK.
问题是由:
引起的
android:screenOrientation="portrait"
并且存在:
<item name="android:windowIsTranslucent">true</item>
因此,如果您从清单中删除此声明,它应该会起作用:
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:screenOrientation="sensorPortrait" android:label="@string/app_name"/>
<activity android:name="com.facebook.CustomTabActivity" android:screenOrientation="sensorPortrait" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_scheme" />
</intent-filter>
</activity>
Facebook SDK 版本 4.27.0
Android OS 版本 8.0
应用异常崩溃,这是我在 Crashlytics 上找到的跟踪日志:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.yyy/com.facebook.FacebookActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2822)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897)
at android.app.ActivityThread.-wrap11(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1598)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6563)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
at android.app.Activity.onCreate(Activity.java:986)
at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:285)
at com.facebook.FacebookActivity.onCreate(FacebookActivity.java:62)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2775)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897)
at android.app.ActivityThread.-wrap11(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1598)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6563)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
谁能帮我解决这个问题?
PS: 在Android源码中,看了987这一行,好像是这一行的罪魁祸首。
此外,在我的清单中:
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" />
删除此属性:
android:screenOrientation="portrait"
来自FacebookActivity
标签,可能会解决问题。
当我从样式中删除这个 <item name="android:windowIsTranslucent">true</item>
时,问题就解决了。
从您的样式菜单中删除此行
<item name="android:windowIsTranslucent">true</item>
已更改
<style name="AppTheme" parent="android:Theme.Translucent.NoTitleBar"></style>`
到
<style name="AppTheme" parent="android:Theme.Holo.NoActionBar.TranslucentDecor"></style>
然后移除
<item name="android:windowIsTranslucent">true</item>
根据最新的 fb 集成指南,我们不需要指定导致 android 8.0 崩溃的主题或方向。所以我们应该使用最新的 fb sdk 和他们的新设置:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
https://developers.facebook.com/docs/facebook-login/android/#manifest
在 Android O 及以后设置
时会发生此错误 android:screenOrientation="portrait"
这段代码写在Android清单文件中:
<activity
android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent"></activity>
从 manifest
文件中删除此
android:screenOrientation="portrait"
并在 setContentView
之前的 oncreate 中将以下代码添加到 activity :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
这将解决 illegalStateException
问题/
在Facebook Developer documentation中:
If you use version 5.15 or later of the Facebook SDK for Android, you don't need to to add an activity or intent filter for Chrome Custom Tabs. This functionality is included in the SDK.
问题是由:
引起的android:screenOrientation="portrait"
并且存在:
<item name="android:windowIsTranslucent">true</item>
因此,如果您从清单中删除此声明,它应该会起作用:
<activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:screenOrientation="sensorPortrait" android:label="@string/app_name"/>
<activity android:name="com.facebook.CustomTabActivity" android:screenOrientation="sensorPortrait" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_scheme" />
</intent-filter>
</activity>