2012/10/07

[n7]NFCを設定アプリ以外から止めるのは難しそうだ

AndroidでNFCを有効にしていると、画面がロックされてなければ無線を出している。
べつにNexus7を持ち歩くわけでもないから電池寿命はそんなに気にしなくていいんだけど、止められるなら止めたい。

 

やはり同じようなことを考える人はいるようで、できなかった、という記事があった。
私も同じことをやって、同じようにだめだった。
/system/appだっけ、あそこに置いていないと解決できないそうだ。

 

自分でビルドした環境だったら好きに出来るのだが、なるべくそういうことをせずにやってみたい。
airplaneモードになれば止まるのだが、それもなんだか大味すぎる。

じゃあこういうのはどうだろうか、とNfcServiceが使っていると思われるlibnfc_jni.soを操作してみようとした。
そしたら・・・loadLibrary()の時点でだめだった。
JNI_OnLoad()でいろいろチェックしているから、そこだろうな。

 

なら自分で同じようなlibをつくるか、となると、どうせHWはライブラリが握ってるだろうから。。。とか考えると、そこまでやるのはちょっとやめよう。


しかし、同じNfcAdapterでも、isEnabled()とかは大丈夫で、enable()がだめなのは何でだろう?
どちらも、sServiceのメソッドを呼び出しているのに。

 

isEnabled()は、NfcAdapterService.getStatus()を呼び出している。
やってるのは、状態を返すだけ。

enable()は、NfcAdapterService.enable()を呼び出している。
やってるのは、状態を保存した後、EnableDisableTask().execute()の実行。

 

お、もしかしてsaveNfcOnSetting()で設定を保存するからセキュリティエラーになってるとかでは。
それなら、disable(false)ってすると保存しないので、止めることくらいなら・・・。

 

だめだった。
どうも、NfcService.enforceAdminPerm()を呼び出すメソッドが、そういうセキュリティ云々といわれる扱いになるようだ。


EnableDisableTask.disableInternal()なんかを呼び出せればいいんだろうけど、これはpublicクラスじゃない。
リフレクションとかいうやつを使うとprivateなメソッドなんかも呼べるようなことが書いてあったが、そういう難しそうなのはやりたくないな。

あの葡萄は酸っぱいんだ、ということで、もうやめることにしよう。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。