京都のスマートフォン・アンドロイドアプリ開発会社のサイトです!

TIPS
当社アプリに関するお知らせや開発裏話を綴ります。

BroadcastReceiver をインナークラス

AlartManager で一定間隔で処理を実行したい場合に、プログラム上インナークラスを定義したいときがある。AlartManager でBroadcastReceiver を継承したクラスを生成した場合、AndroidManifest.xml にそのクラスを定義する必要がある。
インナークラスの場合は、その親クラス名と$を付与した名称で記述することができる。

 <receiver android:name="TestActivity$TestService"></receiver>

その場合、大事なのが、インナークラスを static にする必要がある。

public class TestActivity extends Activity
{
    :
 
    public final static class TestService extends BroadcastReceiver
    {
        public void onReceive(Context context, Intent intent)
        {
              // process
        }
    }
 
    :
}

外部ライブラリ VerifyError Could not find class ’{class name}’ referenced from method ‘{method name}’

Android SDK Tools を Rev. 17 にバージョンアップしたら、以前まで動いていた外部ライブラリを必要とするアプリケーションで、突然ビルドできなくなってしまった。ビルドして、実行すると以下のようにメッセージが表示され、Could not find class で NoClassDefFoundError の例外処理が実行されてしまいます。


Could not find class ’{class name}' referenced from method '{method name}'

いろいろと検索してみると、Build Path の設定で、Order And Export に利用している外部ライブラリにチェックを入れないといけないことがわかった。

[追記]
Eclipseでjarのライブラリを使う場合、libsフォルダに入れるだけでビルドパスの追加は必要が無いようです。詳細は、下記のURLを参照してください。
http://d.hatena.ne.jp/Tackn1977/20120410/1334009456

Copyright © 2011 HuNavi. All Rights Reserved.

このページの先頭へ