Androidに大きなアプリがあります。
時々、アプリケーションは明確でないエラーでクラッシュします。これがいつ、なぜ起こるのか、正確にはわかりません。
Java.lang.SecurityException: Permission Denial: get/set setting for user asks
to run as user -2 but is calling from user 0; this requires
Android.permission.INTERACT_ACROSS_USERS_FULL
何か助け?
Java.lang.SecurityException:許可の拒否:ユーザーの設定を取得/設定すると、ユーザー-2として実行するように求められますが、ユーザー0から呼び出しています。これにはAndroid.permission.INTERACT_ACROSS_USERS_FULLが必要です
これを追加 Android:protectionLevel="signature"
マニフェスト内。
詳細については、 Permission-Element
同様:
<permission Android:name="Android.permission.INTERACT_ACROSS_USERS_FULL" Android:protectionLevel="signature"/>
this answerから要約し、 serHandle.Java のソースを見ると、frameworkユーザーIDの意味がわかります。 。
# | @UserIdInt | Value | Status | Description |
# | --------------------- | ------ | ---------- | ------------|
# | USER_OWNER | 0 | deprecated | "owner" user of the device
# | USER_SYSTEM | 0 | ok | "system" user of the device
# | USER_ALL | -1 | ok | ALL users on the device
| USER_CURRENT | -2 | ok | the currently active user
# | USER_CURRENT_OR_SELF | -3 | ok | id from which we would like to send to the current user
# | USER_NULL | -10000 | ok | An undefined user id
次に、Android:protectionLevel="signature"
は、 permission-element に関するページを読む必要があることを意味します。表に要約されています:
したがって、あなたはAndroidManifest.xml
は、サポートする必要があるAPIに大きく依存します。23を超えるAPIもAndroid:permissionGroup=
定義 、非通常(「危険」)許可の場合...
また知っておくと良い(by @CommonsWare)
INTERACT_ACROSS_USERS
、アプリはファームウェアの署名キーまたはによって署名する必要があります)システムパーティションにインストールする必要があります。
INTERACT_ACROSS_USERS_FULL
、アプリはファームウェアの署名キーで署名する必要があります。
billingProcessor.subscribe()またはbillingProcessor.purchase()をアクティビティとして2つのパラメーターを使用し、製品のproduct_idを使用すると、同じ問題が発生しました。 product_id is emptyの値を渡しました。
Product_idの値が空ではないことを確認してください。
可能な解決策の1つは自動入力を無効にすることですが、これはAndroid Oreo。これを確認してください。 link
このコードをアプリに追加するだけです:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
window.decorView.importantForAutofill =
View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS;
}
GetUserId()メソッドがある場合は名前を変更します。
私は同じ問題に直面しました "Android.permission.INTERACT_ACROSS_USERS_FULL"私のAndroidデバイスのOSバージョンをアップグレードしたとき。私はプロジェクトのクリーンと再構築と問題が解決されました。
非常に奇妙なエラーです... JavaからKotlinに、または多分Android Studioの更新から切り替えました。 XMLと.ktファイルの両方から1つずつ、エラーがユーザーID(エラーに記載されている)とは関係なく、レトロフィット呼び出しでもないことが判明するまで、エラーはXMLの1つのSpinner要素によって引き起こされました。私は要素をロードしたときに.ktファイルでそれについて、ちょうどこれ:
<Spinner
Android:id="@+id/number_people_sp"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="text" />
だから私はそれを削除し、物事は再びうまくいった。この問題は要素の間隔が原因であると考えています(スピナーがTabbed ActivityのFragmentにあったため)。長い行のエラーには間隔と子メジャーに関する何かがあります。
エラーファイル内の可能性のある小さなものをチェックするためだけに心に留めておいてください。
私は同じ問題を抱えており、これを通じて解決できるので、あなたを助けることができます。
Android 28にはいくつかの制限があるため、すべての開発者はこれらの変更を確認し、アプリに適切な場合は適切にサポートするようにアプリを変更する必要があります。
https://developer.Android.com/about/versions/pie/Android-9.0-changes-all
ここに私のコードのいくつかの変更があります
Android 9には回転などの新機能があります。マニフェストでポートレートモードに設定するとクラッシュする可能性があります。コードから回転をリクエストすることをお勧めします。だから、Android:screenOrientation = "portrait"をmanifest.xmlから削除します
私のコードの別の問題は、ブロードキャストの静的登録です
<intent-filter>
<action Android:name="Android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
アクションAndroid.net.conn.CONNECTIVITY_CHANGEは、Android P.として
@Override
protected void onResume() {
super.onResume();
registerReceiver(connectReceiver, newIntentFilter("Android.net.conn.CONNECTIVITY_CHANGE"));
}
build.gradleのすべてのライブラリを更新し、不要な実装を削除します
結論として、
ありがとうございました !