Homeの壁紙情報を取得する

WallpaperManagerを使って壁紙情報を取得し、Activity(Layout)の背景に設定する。

// WallpaperManagerのインスタンスを取得
WallpaperManager wmanager = WallpaperManager.getInstance(context);
// 壁紙情報を取得
Drawable wallpaper = wmanager.getDrawable();

// Layoutの背景にセット
LinearLayout layout =(LinearLayout)findViewById(R.id.layout );
layout.setBackgroundDrawable(wallpaper);
WallpaperManager (API Level5-)

システムの壁紙情報にアクセスする。 getInstance() メソッドでインスタンスを取得する。

Ref.) AndroidDevelopers>WallpaperManager

音声入力を使用する(カスタム)

RecognizerIntent クラスを使わず、音声認識サービスを使うための SpeechRecognizer クラスを使って音声入力をする。オリジナルの音声認識画面を作成することが可能。

 
1. Manifestファイルに、 RECORD_AUDIO の permission を追加する。

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

 

2. SpeechRecognizer を生成し、音声認識処理を行う。

//音声入力ボタン押下イベント
public void onClick(View view){

   if(!SpeechRecognizer.isRecognitionAvailable(getApplicationContext())){
      //SpeechRecognizerが使えない環境
      Log.e("onClick()", "音声認識が使えません。");

   }else{    		
	 //SpeechRecognizer生成
	 SpeechRecognizer recognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
	    	
	 //音声認識開始
	 recognizer.startListening(RecognizerIntent.getVoiceDetailsIntent(context));

   	//RecognitionListenerをセット
   	recognizer.setRecognitionListener(new RecognitionListener(){

		@Override				
		public void onReadyForSpeech(Bundle params) {
			//endpointer がユーザが話し始めるための用意ができたとき。
			//ここで、「お話ください」のダイアログのようなものを表示したりとか。
		}

		@Override
		public void onBeginningOfSpeech() {
			//ユーザが話し始めたとき。
		}

		@Override
		public void onRmsChanged(float rmsdB) {
			//audio stream のサウンドレベルが変わったとき。
		}

		@Override				
		public void onBufferReceived(byte[] buffer) {
			//More sound has been received.				
		}

		@Override				
		public void onEndOfSpeech() {
			//ユーザが話し終えた後。
			//ここで、「処理中」の表示をしたりとか。				
		}

		@Override				
		public void onError(int error) {
			//ネットワークエラー、もしくは認識エラーが発生したとき。				
		}

		@Override				
		public void onResults(Bundle results) {
			//認識結果が用意できたとき。
				
			// 認識結果を取得
			ArrayList result = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
			if(result.size() > 0){
				//第一候補を取得
	    		strInputResult = candidates.get(0).toString();	    			
			}
			//認識結果を EditText にセット
			EditText edittxt = (EditText)findViewById(R.id.edittxt );
			edittxt.setText(strInputResult);
		}

		@Override				
		public void onPartialResults(Bundle partialResults) {
			//部分的な認識結果が利用可能なとき。		
		}

		@Override				
		public void onEvent(int eventType, Bundle params) {
			//Reserved for adding future events.				
		}    		
	}); 
    	
	recognizer.destroy();
}

 

SpeechRecognizer(API Level8-)
音声認識サービスにアクセスするためのクラス。このクラスは、直接インスタンス化せず、createSpeechRecognizer(Context)を使う。
このクラスのメソッドは、メインのアプリケーションスレッドからのみ呼ばれる。

  【 Public Methods 】

    static SpeechRecognizer createSpeechRecognizer (Context context, ComponentName serviceComponent)
    static SpeechRecognizer createSpeechRecognizer (Context context)
      SpeechRecognizer を生成する。
    static boolean isRecognitionAvailable (Context context)
      音声認識サービスが利用可能かチェックする。
    void setRecognitionListener (RecognitionListener listener)
      RecognitionListener をセットする。
    void startListening (Intent recognizerIntent)
      音声認識を開始する。
    void stopListening ()
      音声認識をストップする。speech endpointer が自動的に停止するため、デフォルトではこのメソッドを呼ぶ必要はない。
    void cancel ()
      音声認識をキャンセルする。
    void destroy ()
      SpeechRecognizer オブジェクトを破棄する。

 
Ref.) Android Developers>SpeechRecognizer
 
RecognitionListener(API Level8-)
Public Methods はサンプルソースを確認。

Ref.) Android Developers>RecognitionListener

 

GoogleWeatherAPIから天気情報を取得する #2

APIから現在の天気ときょうの予報のみ取得する

※ Http通信で接続するため、manifestファイルにpermissionを追加する。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
// 取得するデータ
String c_condition;
String c_temp_f ;
String c_temp_c ;
String c_humidity ;
String c_wind ;
String t_low_temp;
String t_high_temp ;
String t_condition ;

// リクエストURL
String requestUrl= "http://www.google.com/ig/api?hl=ja&weather=fukuoka";

URL url = new URL(requestUrl);
// Http通信で接続する
HttpURLConnection http = (HttpURLConnection)url.openConnection();

// XmlPullParser オブジェクトを生成
XmlPullParser xpp = Xml.newPullParser();
// 取得したデータをStreamから直接読み込む
BufferedInputStream inBuffer = new BufferedInputStream(http.getInputStream());
// 日本語エンコード
BufferedReader reader = new BufferedReader(new InputStreamReader(inBuffer, "Shift_JIS"));
xpp.setInput(reader);

for(int e = xpp.getEventType(); e != XmlPullParser.END_DOCUMENT; e = xpp.next() ){
	String tag = xpp.getName(); //タグ名
			
	if(xpp.getDepth() == 3){ //3階層目
		boolean loop_break = false;	
				
		if("forecast_information".equals(tag)){
			do{	//必要ないのでループを進める
				xpp.next();
							
			}while(xpp.getDepth() == 4);
		}					
		//現在の天気データ
		if("current_conditions".equals(tag)){
			do{
				xpp.next();
				tag = xpp.getName();
							
				if(xpp.getEventType() == XmlPullParser.START_TAG){
					if("condition".equals(tag)){
						c_condition = xpp.getAttributeValue(0);
					}else if("temp_f".equals(tag)){
						c_temp_f  = xpp.getAttributeValue(0);
					}else if("temp_c".equals(tag)){
						c_temp_c  = xpp.getAttributeValue(0);							
					}else if("humidity".equals(tag)){
						c_humidity  = xpp.getAttributeValue(0);							
					}else if("wind_condition".equals(tag)){
						c_wind  = xpp.getAttributeValue(0);							
					}
				}							
			}while(xpp.getDepth() == 4);						
		}					
		//本日の天気予報データ	
		if("forecast_conditions".equals(tag)){
			do{
				xpp.next();
				tag  xpp.getName();
							
				if(xpp.getEventType() == XmlPullParser.START_TAG){							
					if("low".equals(tag)){
						t_low_temp = xpp.getAttributeValue(0);
					}else if("high".equals(tag)){
						t_high_temp  = xpp.getAttributeValue(0);
					}else if("condition".equals(tag)){
						t_condition  = xpp.getAttributeValue(0);
									
						//予報は本日分だけ取得するのでループを抜ける
						loop_break = true;
					}
				}
			}while(xpp.getDepth() == 4);
		}
					
		if(loop_break) break;
	}
}
reader.close();// BufferedReader を閉じる
inBuffer.close();// BufferedInputStream を閉じる
http.disconnect();// HttpURLConnection切断
  
HttpURLConnection(API Level1-)
Ref.) Android Developers>HttpURLConnection

XmlPullParser(API Level1-)
Ref.) Android Developers>XmlPullParser

BufferedInputStream(API Level1-)
Ref.) Android Developers>BufferedInputStream

BufferedReader (API Level1-)
Ref.) Android Developers>BufferedReader

GoogleWeatherAPIから天気情報を取得する #1

GoogleWeatherAPI …. 指定されたURLに場所情報を付与して送ると、ピンポイントの天気情報をxml形式で返すAPI。(※ただし、非公式)

URL) http://www.google.com/ig/api?weather=fukuoka

上記URLをブラウザでたたくと、以下のような結果がxmlで表示される。


















































 

【 取得できる情報 】

  • 現在の天気(current_conditions) … 天気、気温(華氏、摂氏)、湿度、天気のアイコン画像、風量
  • 予報データ(forecast_conditions) … 本日を含めて4日間の予報。天気、最高・最低気温、天気のアイコン画像。

 
● 天気情報の種類

  • Partly Sunny(ところにより晴れ)
  • Scattered Thunderstorms(激しいスコール)
  • Showers(にわか雨)
  • Scattered Showers(スコール)
  • Rain and Snow(雨と雪)
  • Overcast(曇天。曇りよりさらに曇った感じ?)
  • Light Snow(弱い雪)
  • Freezing Drizzle(霧雨)
  • Chance of Rain(雨の可能性)
  • Sunny(晴れ)
  • Clear(快晴)
  • Mostly Sunny(だいたい晴れ)
  • Partly Cloudy(ところにより曇り)
  • Mostly Cloudy(だいたい曇り)
  • Chance of Storm(嵐の可能性)
  • Rain(雨)
  • Chance of Snow(雪の可能性)
  • Cloudy(曇り)
  • Mist(霧)
  • Storm(嵐)
  • Thunderstorm(雷嵐)
  • Chance of Storm(嵐の可能性)
  • Sleet(みぞれ)
  • Snow(雪)
  • Icy(非常に寒い)
  • Dust(乾燥して埃っぽい?)
  • Fog(濃霧)
  • Smoke
  • Haze(かすみ、薄霧)
  • Flurries(突風)
  • Light Rain(弱い雨)
  • Snow Showers(吹雪)
  • Hail(あられ、ひょう)

 

● 天気アイコン画像の種類

  • weather_thunderstorms-40.gif
  • weather_partlycloudy-40.gif
  • weather_sunny-40.gif
  • weather_overcast-40.gif
  • weather_rainsnow-40.gif
  • weather_mostlycloudy-40.gif
  • weather_rain-40.gif
  • weather_scatteredthunderstorms-40.gif
  • weather_scatteredshowers-40.gif
  • weather_snowflurries-40.gif
  • weather_haze-40.gif
  • weather_smoke-40.gif
  • weather_fog-40.gif
  • weather_dust-40.gif
  • weather_icy-40.gif
  • weather_snow-40.gif
  • weather_sleet-40.gif
  • weather_cloudy-40.gif
  • weather_drizzle-40.gif
  • weather_windy-40.gif
  • weather_heavyrain-40.gif
  • weather_heavysnow-40.gif
  • weather_scatteredsnowshowers-40.gif