Facebook SDK 版本 4.27.0
安卓操作系统版本 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)
谁能帮我解决这个问题?
附注:在安卓源码中,看了这行号987后,似乎这条线就是罪魁祸首。
https://android.googlesource.com/platform/frameworks/base.git/+/master/core/java/android/app/Activity.java#1002
另外,在我的清单中:
<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
标签,可能会解决问题。
从最新的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
当我从样式问题中删除此<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>
<</div>
div class="one_answers"> 在 Android O 及更高版本中,当您设置
android:screenOrientation="portrait"
此代码编写在 AndroidManifest 文件中:
<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"
并将以下代码添加到 oncreate 中的活动setContentView
:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
这将解决illegalStateException
问题/
在 Facebook 开发者文档中:
如果您使用的是 Facebook SDK for Android 5.15 或更高版本,则无需为 Chrome 自定义添加活动记录或意向过滤器制表符。此功能包含在 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>