こものAndroidメモ

Androidアプリの開発メモブログ!!

ブラウザを起動する —

任意のWebサイトを表示したい時、ブラウザで表示する方法についてです。

AndroidのIntentの機能を使ってブラウザを呼び出します。

 

ブラウザを起動

 
 
コードの量的にはそんなに大したものではありません。

ただ、ブラウザアプリ自体が必ずインストールされているとは限らないので、ブラウザアプリを起動できなかった時の例外処理は必要かと思います。

 

    /**
     * ボタンが押された時の処理.
     */
    public void onTestClick(View view) {
        popupBrowser("http://android-blog.smartphone-app.net/");
    }
    
    /**
     * ブラウザアプリを起動.
     */
    public void popupBrowser(String url) {
        if(url.equals("")){
            return;
        }

        try {
            Uri uri = Uri.parse(url);

            Intent i = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(i); 
        } catch (Exception e){
            Toast.makeText(this, "ブラウザアプリの起動に失敗",
                    Toast.LENGTH_LONG).show();
        }
    }

 
こんな感じでしょうか……。
 



ボタンのイベント処理 —

基本的なことですが、ボタンを押した時のイベント処理について記述してみました。
 

ボタンを押したときに、「ボタンが押された」というメッセージを表示します。
 

ボタンが押された

 
 

まずは、空のXMLにボタンの記述を行います。

onClickのプロパティで指定してやることよって、ボタンが押された時にそのメソッドに飛びます。
下記の例では「onTestClick」という任意の名前のメソッドを指定しています。
 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <Button
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="ボタン"
		android:onClick="onTestClick"
		/>
    
</LinearLayout>

 
 

次にコード側の実装です。
XMLで記述した呼び先のメソッド名「onTestClick」をこちらでも記述します。
 

public class TestMainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
    }
    
    public void onTestClick(View view) {
		Toast.makeText(this, "ボタンが押された", Toast.LENGTH_LONG).show();
    }
}

 

これらによって、ボタンが押された時に「ボタンが押された」とメッセージが表示される機能ができました。
 

尚、タイプミスなどで「onTestClick」というメソッド名が間違っていると、次の例のようなエラーで落ちることがあります。
 


FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not find a method onTestClick(View) in the activity class com.example.test.TestMainActivity for onClick handler on view class android.widget.Button

 
 

古いバージョンのProGuardで難読化すると、落ちるケースもありましたが、最近のものは大丈夫みたいですね。
 



ICT ERA + ABC 2012 東北 —

仙台で行われた「ICT ERA + ABC 2012 東北」というイベントへ行ってきました。

 

ドロイド君

 

 

ABC2012のステッカー

イベントステッカー

 

「震災被害を忘れない、風化させない」というテーマで、震災時のITCの活用事例やいつか起こり得るかもしれない次の災害への取り組みに関してセッションが行われていました。

 

セッション

 

ITCだけではなく、もちろんAndroid関連のセッションや展示もあり、とても勉強になりました。

 

せっかくですので、懇親会にも出席しました。

地元の企業の方々や首都圏の開発者の方々と交流できて、とても貴重な体験になりました。

懇親会

 

正直なところ、仙台は京都から遠いですが、こういう機会に行けてよかったです。

 



日本Androidの会 関西支部勉強会 —

日本Androidの会 関西支部の勉強会へ行ってきました。

イベント:日本Androidの会 関西支部勉強会

 

日本Androidの会 関西支部勉強会

 

有山さんのAndroidの歴史の話がとても分かりやすくてよかったです。

あと、ハードウェア回りの杉本さんのお話も興味深かったです。
保存処理などはスレッドを使うことによって、カクカク感を少しは改善できるんだなぁと感じました。

 

勉強になりました。



SimpleDateFormatで例外が出る —

[問題]

SimpleDateFormatで日付の文字列をDate型に格納しようしたら、Unparseable dateの例外が出る。

[症状]

RSSを取得して、日付の文字列をDate型に格納するプログラムを書いていました。

text = "Sat, 16 Jun 2012 13:29:49 +0000";

Date date;
SimpleDateFormat format =
 new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");

try {
 date = format.parse(text);
} catch (ParseException e) {
}

エミュレータでは正常に動作するのに、Android端末の実機で動かすと、

Unparseable date: “Sat, 16 Jun 2012 13:29:49 +0000”

というParseExceptionが発生します。

[原因]

ロケールが設定されていなかった。

SimpleDateFormat format =
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");

というところに、java.util.Locale.ENGLISHを設定すると例外は発生しなくなりました。

↓↓↓

SimpleDateFormat format =
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z",
        java.util.Locale.ENGLISH);

エミュレータは英語のロケールだったので、たまたま動いていたようです。
日本語のロケールだと、「Sat」などはパースできないみたいですね。