web-dev-qa-db-ja.com

Android permission.INTERACT_ACROSS_USERS_FULL

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

何か助け?

30
offset

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"/>
13
IntelliJ Amiya

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 に関するページを読む必要があることを意味します。表に要約されています:

enter image description here

したがって、あなたはAndroidManifest.xmlは、サポートする必要があるAPIに大きく依存します。23を超えるAPIもAndroid:permissionGroup=定義 、非通常(「危険」)許可の場合...

また知っておくと良い(by @CommonsWare)

INTERACT_ACROSS_USERS、アプリはファームウェアの署名キーまたはによって署名する必要があります)システムパーティションにインストールする必要があります。

INTERACT_ACROSS_USERS_FULL、アプリはファームウェアの署名キーで署名する必要があります。

8
not2qubit

billingProcessor.subscribe()またはbillingProcessor.purchase()をアクティビティとして2つのパラメーターを使用し、製品のproduct_idを使用すると、同じ問題が発生しました。 product_id is emptyの値を渡しました。

Product_idの値が空ではないことを確認してください。

3

可能な解決策の1つは自動入力を無効にすることですが、これはAndroid Oreo。これを確認してください。 link

このコードをアプリに追加するだけです:

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        window.decorView.importantForAutofill = 
        View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS;
    }

GetUserId()メソッドがある場合は名前を変更します。

2
user7856586

私は同じ問題に直面しました "Android.permission.INTERACT_ACROSS_USERS_FULL"私のAndroidデバイスのOSバージョンをアップグレードしたとき。私はプロジェクトのクリーンと再構築と問題が解決されました。

0
Ali Soleimani

非常に奇妙なエラーです... 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にあったため)。長い行のエラーには間隔と子メジャーに関する何かがあります。

エラーファイル内の可能性のある小さなものをチェックするためだけに心に留めておいてください。

0
Robert Pal

私は同じ問題を抱えており、これを通じて解決できるので、あなたを助けることができます。

Android 28にはいくつかの制限があるため、すべての開発者はこれらの変更を確認し、アプリに適切な場合は適切にサポートするようにアプリを変更する必要があります。

https://developer.Android.com/about/versions/pie/Android-9.0-changes-all

ここに私のコードのいくつかの変更があります

  1. Android 9には回転などの新機能があります。マニフェストでポートレートモードに設定するとクラッシュする可能性があります。コードから回転をリクエストすることをお勧めします。だから、Android:screenOrientation = "portrait"manifest.xmlから削除します

  2. 私のコードの別の問題は、ブロードキャストの静的登録です

    <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"));
       }
    
  3. build.gradleのすべてのライブラリを更新し、不要な実装を削除します

結論として、

  • ください、まずAndroid動作の変更に関する完全なドキュメントをお読みください
  • 制限されているため、必要な変更(オリエンテーション、ブロードキャスト、バックグラウンドサービスなど)を行います。

ありがとうございました !

0
Ramesh Pokharel