2014年01月29日

[Android] 強制停止するとBroadcastが受信できない

今開発中のアプリでBroadcastReceiverを使っています。
Manifestに書くだけで受信できるタイプのBroadcastを受け取るBroadcastReceiverです。

設定からアプリを「強制停止」させると、これが受信できなくなりました。
そういえば、いつのバージョンからかそういうことになっていた気がします。
検索したら↓こちらのブログが見つかりました。Android3.1以降だそうです。

Yukiの枝折: Android:Broadcastを受信できないアプリのSTOP状態

こちらの記事には、「一度も起動していない状態」のことは書かれていますが、「強制停止」したときのことは書かれていません。
たぶん同じだろうとは思いましたが、一応確認することにしました。
エミュレータでNexus4(API LEVEL 16)を作成して、"/data/system/packages-stopped.xml"を探します。
しかし、"/data/system/"に"packages-stopped.xml"がありません。
ソースコードを見てみると、記録されるファイルが変わっていました。
新しい場所は"/data/system/users/0/package-restrictions.xml"でした。(0はユーザーのID)
マルチユーザが導入されたのはAndroid4.2からだと思ってましたが、内部的にはAndroid4.1の頃からあったんですね。
XMLの中身も変わっているようです。こんな感じでした。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<package-restrictions>
<pkg name="com.hoge.app" stopped="true" nl="true" />
<pkg name="com.fuga.app" stopped="true" />
<pkg name="com.piyo.app" />
</package-restrictions>

一度も起動していないと「nl="true"」付くようです。
停止状態だと「stopped="true"」が付くようです。これが付いているとBroadcastを受け取れないんですね。
お勉強になりました。

posted by t2low at 22:00| Android