16

Androidの「am」コマンドを使用してアクティビティを開始しようとすると、4.2プラットフォームでは間違っています(試してみましたが、2.3バージョンでは問題ありません)。コードは次のようになります

out = process.getOutputStream();
out.write(("am start -a android.intent.action.VIEW -n com.android.browser/com.android.browser.BrowserActivity\n").getBytes());
out.flush();

InputStream in = process.getInputStream();
BufferedReader re = new BufferedReader(new InputStreamReader(in));
String line = null;
while((line = re.readLine()) != null) {
    Log.d("conio","[result]"+line);
}

エラーは次のようになります。

java.lang.SecurityException: Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL 
at android.os.Parcel.readException(Parcel.java:1425)                                                                                                                        
at android.os.Parcel.readException(Parcel.java:1379)                                                                                                                        
at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:1921)                                                                                    
at com.android.commands.am.Am.runStart(Am.java:494)                                                                                                                         
at com.android.commands.am.Am.run(Am.java:109)                                                                                                                              
at com.android.commands.am.Am.main(Am.java:82)                                                                                                                              
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)                                                                                                      
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)                                                                                                           
at dalvik.system.NativeStart.main(Native Method)                                                                                                                            

私は知りたいです

1.ユーザー -2 と 0 は何を意味しますか?

2.これらの ID の詳細はどこで確認できますか?

3.権限を追加するだけで、どうすればよいですか? 私はそれらについて何も知らない権限を追加したくありません.誰かが私を助けてくれますか?

4

5 に答える 5

13

表示されているユーザー 0 とユーザー -2 はフレームワークのユーザー ID であり、Linux の UID ではありません。android.os.UserHandleから、 userId0 がデバイス所有者であることがわかります(これは、ルートである USER_OWNERLinux 0 とはまったく異なります)。-1 はすべてのユーザー ( )、-2 は現在のユーザー ( )、-3 は現在のユーザーまたは自分自身 ( )、- 10000 は null ユーザー ( ) を表します。uiduserIdUSER_ALLuserIdUSER_CURRENTuserIdCURRENT_OR_SELFuserIdUSER_NULL

パーミッションINTERACT_ACROSS_USERS_FULLに関しては、マニフェスト ファイルで宣言できますが、アプリが Android システム イメージ内にあるか、パーミッションを宣言するシステム イメージ内の別のアプリケーションと同じ証明書で署名されている場合にのみ許可されます。つまり、signatureまたはsignatureOrSystem許可です。

于 2014-02-27T09:34:57.273 に答える
-2

アクセス許可は、マニフェストに追加して、これらのリソースにアクセスし、Android にこれらのリソースの使用を許可するように要求することを通知する必要がある単なるコード行です。 ここに画像の説明を入力

1)許可を含む例を追加しました。

2) Linux には root ユーザー、グループなどがあります。0 がルートになり、UID が負になることはありません。その値は 0 ~ 999 です。このリンクを参照してください。

于 2013-08-12T03:48:03.677 に答える
-14

1) Linux では、すべてのユーザーに ID 番号があります。0 と -2 はユーザー ID (UID) です。0 はルート、-2 はランダムなユーザーです (個人ではない可能性があります。内部的な理由で使用される偽のアカウントである可能性があります)。

2) Linux に関する本。Android は、Linux 上の単なるグラフィカル フレームワークです。

3)はい、許可を追加するだけです。

于 2013-08-12T03:42:41.140 に答える