2013年6月20日木曜日

[Android]startActivity使ったら変なWarnログがでた

Android4.2でシステム権限持ってるアプリとかが
startActivity()とかsendBroadcast()とか使ったらこんなWarnログが出た
"Calling a method in the system process without a qualified user"
:おんみゃさんシステムプロセスなんじゃけぇ、資格を持つユーザえらびんしゃぃっ!

startService()についてはログは出ない模様。なんで?

んで、Frameworkをのぞいてみればこんなメソッドがいましたと。
public void startActivityAsUser(Intent intent, UserHandle user);
public void sendBroadcastAsUser(Intent intent, UserHandle user);
public ComponentName startServiceAsUser(Intent service, UserHandle user);
public boolean stopServiceAsUser(Intent service, UserHandle user);
確かにユーザ選べる引数が追加されている。
引数のUserHandleはこんな感じの呼べば良さそう
//端末の全ユーザ
UserHandle.ALL

//現在アクティブのユーザ
UserHandle.CURRENT

//現在アクティブのユーザ
//ただし、呼び元がユーザープロセスだった場合security exception投げる(本当かは不明
UserHandle.CURRENT_OR_SELF

// 端末のオーナー(primary/owner) */
UserHandle.OWNER
CURRENT_OR_SELFはPhoneFallbackEventHandler.javaが、
カメラボタン長押下時にIntent.ACTION_CAMERA_BUTTONを飛ばすのに使ってる。
カメラだからセキュリティ周り関係あるだろうけど、
どういう用途なのかがわからない。

結論は、とりあえずhogeAsUser()メソッド使うってだけなんだけど、
なんで?って聞かれると4.2でマルチユーザ対応になったからゴニョゴニョとしか...
あんま深く追ってないから、このくらいしかわからんとです。

みんな頑張って

0 件のコメント:

コメントを投稿