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

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

外部ライブラリ 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

「撮りっぷ」アプリがシティリビング 大阪版に掲載されました。

サンケイリビング新聞社が発行のフリーペーパーでシティリビング 大阪版(2012年3月16日発行)に「撮りっぷ」が掲載されました。
また、同時に、シティリビング ウェブ版シティスタイルラボのコーナーで掲載されております。

ご掲載をいただき誠にありがとうございました。

strings.xml の値で、@(アットマーク)や?(クエスションマーク)をエスケープ

文字列リソース(strings.xml)にて、@(アットマーク)や?(クエスションマーク)を記述したい場合がある。以下のように記述しても、実行時にエラーになってしまいます。

<string name="address">@gmail.com</string>

Android 開発において、@(アットマーク)や?(クエスションマーク)は特別な意味を持っているため、エスケープ文字で記述します。

<string name="address">"@"gmail.com</string>

その他の文字列については、下記の URL を参考にする必要があります。

http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

Android で RSS/ATOM データをパース(解析)する

Java の場合、jdomROME ライブラリを用いて、RSS/ATOM をパース(解析)することがあります。残念ながら、このライブラリを Android でそのまま利用しても実行途中でエラーになってしまい使用することができません。ROME は、Apache License 2.0 の元で配布されているオープンソースの Java ライブラリです。
そこで、Android 版 ROME を用います。
使い方は、簡単です。

SyndFeedInput input = new SyndFeedInput();
try
{
	String xml = "<?xml version="1.0" encoding=\"utf-8\" ?><rdf:RDF xmlns=\"http://purl.org/rss/1.0/\">...</rdf:RDF>";
	SyndFeed feed = input.build(new StringReader(xml));
	for (Object obj : feed.getEntries()) 
	{
		SyndEntry entry = (SyndEntry) obj;
		// ArrayAdapter に追加
	}
}
catch (IllegalArgumentException ex)
{
	ex.printStackTrace();
}
catch (FeedException ex)
{
	ex.printStackTrace();
}

「撮りっぷ」がモバイルSuica 徹底活用術に掲載

撮りっぷ
ジョルダン株式会社発行の「モバイルSuica 徹底活用術」(2012年1月10日発行) に当社のAndroid アプリ「撮りっぷ」を掲載(p.74)していただきました。ありがとうございます。

パナソニック様の業務向けタブレット端末

先日、パナソニック様の業務向けタブレット端末に関するセミナーを聞きに行ってきました。後発ともありパナソニック様の気迫を感じる製品でした。Android OS は、3.2 ではありますが、7インチ型モデルは手袋をしたままで操作ができる抵抗膜方式のタッチパネルを採用しております。CPU は、ARM のCortex-A9 の Dual コアを採用されており、動作的にも問題はないように思いました。特に気になっているのが、USB 2.0 のホストモードが正式に搭載されていることです。いよいよ Android タブレットに USB 周辺機器が接続され、より多くの利用が見込まれることが予想されます。
今後のパナソニック様のタブレット端末は、注目です。

日本Androidの会 京都支部 第3回勉強会

12月3日に京都高度技術研究所(ASTEM)にて、日本Android の会 京都支部 第3回勉強会が開催されます。一緒にAndroid で京都を盛り上げましょう!
ご参加のご希望の方は、下記の ATND からお申込ください。

http://atnd.org/events/22365

スマートデバイス活用セミナー in 京都

株式会社スリーエースが主催される『スマートデバイス活用セミナー』が2011年12月13日(火)に京都市国際交流会館で行われるそうです。株式会社スリーエースの営業部の方が『アプリケーション開発会社から見たAndroidの現状』というテーマで講演されるので、楽しみです!!詳細については、下記のサイトをご参照ください。

http://www.apppps.com/?page_id=1985

日本Androidの会 京都支部 10月 勉強会

日本Androidの会 京都支部の10月の勉強会が10月28日に開催されます。
参加希望の方は、下記の ATND からお申込ください!
現在、立ち見になりますが、数名ほど余裕があります。京都から Android アプリを発信しませんか?!

日本Androidの会 京都支部 10月 勉強会

AlarmManager と NotificationManager

目覚まし時計のように、ある時刻になったら通知をしてくれるケースについて処理について説明します。

まず、起因に下になる Activity にて、AmarmManager に Intent を追加します。下記の例では、システム時間の15秒後に AlarmBroadcastReceiver が呼ばれます。

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 15); 
 
Intent intent = new Intent(this,AlarmBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this,0,intent,0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
Toast.makeText(this, "Alarm Start!", Toast.LENGTH_SHORT).show();

その AlarmBroadcastReceiver では、NotificationManager を使って、端末に通知を行います。

public class AlarmBroadcastReceiver extends BroadcastReceiver 
{
 
	/* (non-Javadoc)
	 * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
	 */
	@Override
	public void onReceive(Context context, Intent intent) 
	{
		NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
 
		Notification notification = new Notification(R.drawable.icon,context.getString(R.string.app_name),System.currentTimeMillis());
 
		Intent _intent = new Intent(context.getApplicationContext(),MainActivity.class);
		PendingIntent pending = PendingIntent.getActivity(context, 0, _intent, 0);
 
		notification.setLatestEventInfo(context.getApplicationContext(),"通知タイトル","通知説明",pending);
		manager.notify(1, notification);
		Toast.makeText(context, "Alarm Received!", Toast.LENGTH_SHORT).show(); 
	}
}

AlarmManager と NotificationManager を使う場合、AndroidManifest.xml にそれぞれを登録する必要があります。

        <receiver android:name=".AlarmBroadcastReceiver" android:process=":remote" />
        <service android:name="NotificationChangeService" />

Copyright © 2011 HuNavi. All Rights Reserved.

このページの先頭へ