/var/log/messages

debugging with sixth sense

sendBroadcast の Action でハマった件

こうしてエントリにしようとして文字にしてみると馬鹿なことしてるな、と痛感する次第です。

ええと、AndroidManifest で以下な記述にしておりまして

<receiver android:name="com.example.hoge.fuga"
    android:exported="false" />
    <intent-filter>
       <action android:name="com.example.hoge.Fuga.piyo" />
    </intent-filter>
</receiver>

ちなみに intent-filter のアクションに指定してる文字列は変数名でした。で Fuga.java の piyo って変数の定義が以下。

protected static final String piyo = "com.example.hoge.TWEETED";

で、sendBroadcast する時は以下のようにしてました。

Intent i = new Intent();
i.setAction(Fuga.piyo);
sendBroadcast(i);

これで Broadcast が飛んでこない、ってうんうん唸っていた次第。阿呆です。action な文字列がそもそも違うので駄目。

こうしたケイスでは string.xml あたりで文字列定義しておく方が良いのかしら。どうやって持つのが一番良いのでしょうね。現時点では

AndroidManifest.xml の定義が以下で

<receiver android:name="com.example.hoge.fuga"
    android:exported="false" />
    <intent-filter>
       <action android:name="com.example.hoge.TWEETED" />
    </intent-filter>
</receiver>

あとは同じ、なのか。

<string name="broadcast_action">TWEETED</string>

で Manifest では以下?

<receiver android:name="com.example.hoge.fuga"
    android:exported="false" />
    <intent-filter>
       <action android:name="@string/broadcast_action" />
    </intent-filter>
</receiver>

で sendBroadcast は以下なのか。

Intent i = new Intent();
i.setAction(getContext().getResources().getString(R.string.broadcast_action));
sendBroadcast(i);

それにしても、とほほに過ぎるorz

ちなみに

通常どうなっているのか、と思い確認してみたのですが例えば

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

は確かに値ですね。定義としては android.content.Intent.ACTION_MAIN でその値は上の通りになっています。この方法で問題ないのかどうか。

Comments