BroadcastReceiverとマニフェストのみでのインテント受信可否について

2,470 views
Skip to first unread message

Junichi Suzuki

unread,
Oct 3, 2011, 10:09:20 PM10/3/11
to 日本Androidの会
鈴木と申します。初投稿になります。
AndroidおよびJava初心者です。
基本的な内容で恐縮ですが、以下ご教授願います。

◆質問
端末に電源が接続されたことを検知してアプリを起動したいです。
テスト用に"ACTION_POWER_CONNECTED"を検知したらトーストを表示するソフトを作成しましたが、
端末に電源を接続してもトーストが表示されません。
そもそもBroadcastReceiverとAndroidManifest.xmlのみのアプリでは、インテント受信は不可能でしょうか?

以下にソースコードを添付いたしますので、ご指南お願いいたします。

~~~AndroidManifest.xml(抜粋)~~~
<application android:icon="@drawable/icon" android:label="@string/
app_name" android:debuggable="true">
<receiver android:name="PowerReceiver">
<intent-filter>
<action
android:name="android.intent.action.ACTION_POWER_CONNECTED"></action>
</intent-filter>
</receiver>
</application>

~~~PowerReceiverクラス~~~
public class PowerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED"))
{
//トーストの表示
String text = "電源が接続されました";
showToast(context, text);
}
}

//トーストの表示
private static void showToast(Context context, String text) {
Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
}
}

◆参照した過去ログ
「BroadcastReceiverはマニフェストとonReceiveのオーバーライドだけでは無理?」
https://groups.google.com/group/android-group-japan/browse_thread/thread/7a2bc455cf2067d3?hl=ja

近しい内容と思いましたが、知識不足のため理解に至らず、
申し訳ありませんが質問させていただきました。

以上、よろしくお願い致します。

kacodama

unread,
Oct 4, 2011, 4:17:08 AM10/4/11
to 日本Androidの会
Logを仕込んでみてはいかがですか?

ToastはUIスレッドからでないと呼べなかいかと。
> 「BroadcastReceiverはマニフェストとonReceiveのオーバーライドだけでは無理?」https://groups.google.com/group/android-group-japan/browse_thread/thr...

Junichi Suzuki

unread,
Oct 4, 2011, 6:59:23 AM10/4/11
to 日本Androidの会
kacodama様
早速のアドバイスありがとうございます。

下記の通りLog出力を追加して端末への電源接続を確認してみましたが、Logは出力されませんでした。

if(intent.getAction().equals("android.intent.action.ACTION_POWER_CONNECTED"))
{
//トーストの表示
String text = "ブロードキャストレシーバーのテスト:Power ON";
showToast(context, text);

//Log出力
Log.d("TEST", "Power ON");
}

やはり、BroadcastReceiverとAndroidManifest.xmlのみのアプリでは、インテント受信は不可能ということでしょう
か。
引き続き、ご教授、アドバイスをいただけると助かります。

以上、よろしくお願い致します。

Tetsuro Nakamura

unread,
Oct 4, 2011, 9:54:27 AM10/4/11
to android-g...@googlegroups.com
t2lowと申します。

少し気になったのでサンプルコードを書いてみました。
特に問題なく受信することができました。特別なことはやってないです。
動作を確認した端末はHTC DesireとXperia X10 mini proです。

私が書いたサンプルは以下に置いておきますので、よろしければご確認ください。
http://blog.tappli.com/article/48323721.html

以上です。


2011年10月4日19:59 Junichi Suzuki <mamed...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

Sato

unread,
Oct 4, 2011, 8:43:02 PM10/4/11
to 日本Androidの会
こんにちは。Satoと申します。

質問内容のAndroidManifest.xmlを見てふと気になったのですが、
レシーバクラスのname指定で最初に"."が抜けていないでしょうか。

> ~~~AndroidManifest.xml(抜粋)~~~
> <application android:icon="@drawable/icon" android:label="@string/
> app_name" android:debuggable="true">
> <receiver android:name="PowerReceiver">
> <intent-filter>
> <action
> android:name="android.intent.action.ACTION_POWER_CONNECTED"></action>
> </intent-filter>
> </receiver>
> </application>


これのせいでクラス指定が上手くいっていないと思います。


既に解決しているのかもしれませんが、一応投稿させていただきます。

以上です。

Junichi Suzuki

unread,
Oct 4, 2011, 11:23:36 PM10/4/11
to 日本Androidの会
t2low様、Sato様

お世話になります。
鈴木です。

ありがとうございます。
ご教授いただいた内容を確認してみます。

Junichi Suzuki

unread,
Oct 6, 2011, 3:31:38 AM10/6/11
to 日本Androidの会
お世話になっています。
鈴木です。

前回までの記載内容で機種情報を記載しておりませんでした。申し訳ありません。
当方での確認結果を以下に記載いたします。
結果につきましては、t2low様に頂いたサンプル(Log出力を当方で追加)での動作確認結果を記載いたします。

[ 機種 ]LG Optimus Pad
[ OS ]3.1
[ 結果 ]BroadcastReceiverとマニフェストのみのアプリで"ACTION_POWER_CONNECTED"を受信できない
[ Log ]以下のログが出力されていました。
10-06 16:14:38.027 W/PowerUI ( 203): unknown intent: Intent
{ act=android.intent.action.ACTION_POWER_CONNECTED flg=0x10000010 }


下記機種では問題なく動作できました。
t2low様、Sato様ありがとうございました。

[ 機種 ]Samsung SC-02B
[ OS ]2.3.3
[ 結果 ]BroadcastReceiverとマニフェストのみのアプリで、"ACTION_POWER_CONNECTED"の受信を確認済み

どうやら、LG Optimus Pad(OS 3.1)ではOSからインテントが通知されいないようです。
以上、ご報告申し上げます。

Junichi Suzuki

unread,
Oct 6, 2011, 5:49:16 AM10/6/11
to 日本Androidの会
お世話になっています。
鈴木です。

何度もすみません。
先の私の記載内容に間違いがあると思われましたので、再度質問させてください。
基本的な質問で恐縮ですが、ご教授の程、よろしくお願いいたします。

>[ 機種 ]LG Optimus Pad
>[ OS ]3.1
>[ 結果 ]BroadcastReceiverとマニフェストのみのアプリで"ACTION_POWER_CONNECTED"を受信できない
>[ Log ]以下のログが出力されていました。
>10-06 16:14:38.027 W/PowerUI ( 203): unknown intent: Intent
>{ act=android.intent.action.ACTION_POWER_CONNECTED flg=0x10000010 }
>どうやら、LG Optimus Pad(OS 3.1)ではOSからインテントが通知されいないようです。

ログにunknown intentとし
て"act=android.intent.action.ACTION_POWER_CONNECTED"が
出力されているということは、OSからはインテントが発行されているということでしょうか?

以上、よろしくお願いいたします。

Tetsuro Nakamura

unread,
Oct 6, 2011, 12:36:48 PM10/6/11
to android-g...@googlegroups.com
私もOptimusPadを持っていたので確認してみました。
確かに私の作ったサンプルでは動作しませんでした。

いろいろと動作を確認している中で、プログラムからregisterReceiver()で
ACTION_POWER_CONNECTEDを登録したときは
OptimusPadでも正常にBroadcastを受け取れることがわかりました。
リファレンスを読む限りではそんなことは必要なさそうなのですが…。
(英語は得意でないので私が読み間違えているかも知れません)

http://developer.android.com/intl/ja/reference/android/content/Intent.html#ACTION_POWER_CONNECTED

Honeycombで動作が変わってしまったんでしょうか??
動作が腑に落ちませんが、ちょっと私の力ではこれ以上お役に立てそうにありません。

以上です。

2011年10月6日18:49 Junichi Suzuki <mamed...@gmail.com>:

Taizo Nakatani

unread,
Oct 6, 2011, 1:14:12 PM10/6/11
to android-g...@googlegroups.com
noxiです。

ちょっと気になったので手持ちのIS05(2.2)とICONIA TAB(3.1)で試してみましたが
AndroidManifest.xmlに記述しただけではIS05は受信可、ICONIAは受信不可でした。
Context#registerReceiverは試していません。

報告までに。


2011年10月7日1:36 Tetsuro Nakamura <t2l...@gmail.com>:

Takahiro Shimokawa

unread,
Oct 6, 2011, 10:48:27 PM10/6/11
to 日本Androidの会
下川と申します。
気になったので、少し調べてみました。

AndroidManifest.xmlに登録して受信出来るIntentとして、
ACTION_BATTERY_LOW
ACTION_BATTERY_OKAY
ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
が用意されているようです。

もう一つbattery関連では、
ACTION_BATTERY_CHANGED
があるようです。
http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED

CHANGEDの方は、AndroidManifest.xmlへの登録だけでは受信出来ず、
レシーバーの登録にはメソッドで行うように、リファレンスに記載がありました。

私は3.x系の端末を持っていないので、以下は推測です。

恐らく、3.x系では外部電源接続時にACTION_POWER_CONNECTEDのIntentは
来ていないと思います。
ただ、何かしらのBroadcastは来ているので、unknown intentのエラーが出るのだと
思います。(試しに、レシーバークラスでどんなactionが取れてるのか、ログに出力
されてみてはいかがでしょうか?恐らくACTION_BATTERY_CHANGEDが、
来ているような気がします。)

ちなみに、CHANGEDですのでバッテリー状態の変化などでも、通知が来ます。
詳細は、BatteryManagerクラスに載ってました。
http://developer.android.com/reference/android/os/BatteryManager.html

リファレンスとにらめっこしただけで、動作は確認しておりませんので、ご参考までに。


On 10月7日, 午前2:14, Taizo Nakatani <tzo....@gmail.com> wrote:
> noxiです。
>
> ちょっと気になったので手持ちのIS05(2.2)とICONIA TAB(3.1)で試してみましたが
> AndroidManifest.xmlに記述しただけではIS05は受信可、ICONIAは受信不可でした。
> Context#registerReceiverは試していません。
>
> 報告までに。
>
> 2011年10月7日1:36 Tetsuro Nakamura <t2lo...@gmail.com>:
>
>
>
>
>
>
>
> > 私もOptimusPadを持っていたので確認してみました。
> > 確かに私の作ったサンプルでは動作しませんでした。
>
> > いろいろと動作を確認している中で、プログラムからregisterReceiver()で
> > ACTION_POWER_CONNECTEDを登録したときは
> > OptimusPadでも正常にBroadcastを受け取れることがわかりました。
> > リファレンスを読む限りではそんなことは必要なさそうなのですが…。
> > (英語は得意でないので私が読み間違えているかも知れません)
>
> >http://developer.android.com/intl/ja/reference/android/content/Intent...
>
> > Honeycombで動作が変わってしまったんでしょうか??
> > 動作が腑に落ちませんが、ちょっと私の力ではこれ以上お役に立てそうにありません。
>
> > 以上です。
>
> > 2011年10月6日18:49 Junichi Suzuki <mamedaik...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages