有人知道运行Android 9的华为手机的问题吗?尝试访问时,它总是返回null:
context.getSystemService(UserManager.class)
问题在于很多API都依赖它,例如androidx.core中的UserManagerCompat:
public static boolean isUserUnlocked(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 24) {
return context.getSystemService(UserManager.class).isUserUnlocked();
} else {
return true;
}
}
哪个导致:
java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6737)
at android.app.ActivityThread.access$2000 (ActivityThread.java:273)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2020)
at android.os.Handler.dispatchMessage (Handler.java:112)
at android.os.Looper.loop (Looper.java:216)
at android.app.ActivityThread.main (ActivityThread.java:7625)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
at com.android.internal.os.WebViewZygoteInit.main (WebViewZygoteInit.java:171)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:987)
Caused by: java.lang.NullPointerException:
at androidx.core.os.UserManagerCompat.isUserUnlocked (UserManagerCompat.java:1)
at com.google.firebase.FirebaseApp.initializeAllApis (FirebaseApp.java:1)
at com.google.firebase.FirebaseApp.initializeApp (FirebaseApp.java:4)
at com.google.firebase.FirebaseApp.initializeApp (FirebaseApp.java:1)
at com.google.firebase.FirebaseApp.initializeApp (FirebaseApp.java:1)
任何解决方法?
答案 0 :(得分:1)
您可以尝试用服务名称替换服务类吗?
public static boolean isUserUnlocked(@NonNull Context context) {
if (Build.VERSION.SDK_INT >= 24) {
return ((UserManager) context.getSystemService(Context.USER_SERVICE)).isUserUnlocked();
} else {
return true;
}
}
答案 1 :(得分:0)
在Andris回答之后,华为似乎正确回应了:
Context.getSystemService(Context.USER_SERVICE)
不要:
Context.getSystemService(UserManager.class)
因此,我必须重写Application#getSystemServiceName(Class<?> clazz)
才能使UserManagerCompat.isUserUnlocked(Context context)
在多虫的华为手机上工作:
@Override
public String getSystemServiceName(Class<?> serviceClass) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
&& "huawei".equalsIgnoreCase(Build.MANUFACTURER)) {
String systemServiceName = super.getSystemServiceName(serviceClass);
if (systemServiceName == null && UserManager.class.equals(serviceClass)) {
systemServiceName = Context.USER_SERVICE;
}
return systemServiceName;
}
return super.getSystemServiceName(serviceClass);
}
之所以可行是因为FirebaseApp在可用时正在使用Context#getApplicationContext()
...