2012年07月04日


クリックしてサーチを呼び出す / Android Java

既存のアプリケーションを呼び出す為に、intent を使用して Activity を開始します。
サーチ1では、クラス名で直接『サーチ』を呼び出していますが、サーチ2では、API を使って呼び出しています(その際、検索文字列が指定できます)。また、自作アプリの呼び出しでは、呼び出されたアプリから結果が戻されるようになっています

※ DDMS の stop では、ON DESTROY には移行しません
package jp.winofsql.app01;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ClickAndCallActivity extends Activity {
    private static final String TAG = "Call";
    private static final boolean D = true;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        if(D) Log.i(TAG, "+++ ON CREATE : 初回の開始 +++");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 呼び出しボタン( サーチ1 )
	    Button btn1 = (Button) this.findViewById(R.id.button1);
	    btn1.setOnClickListener(new OnClickListener() {  
	    	  
	         public void onClick(View v) {  
	
	        	 Intent intent = new Intent();
	        	 
	        	 intent.setClassName(
	        			 "com.android.quicksearchbox",
	        			 "com.android.quicksearchbox.SearchActivity"
	        			 );
	        	 
	        	 if(D) Log.i("呼び出し1", "------");
	        	 startActivity(intent);     	        	 

	        }
		          
	    });          
	    
        // 呼び出しボタン( サーチ2 )
	    Button btn2 = (Button) this.findViewById(R.id.button2);
	    btn2.setOnClickListener(new OnClickListener() {  
	    	  
	         public void onClick(View v) {  
	
	        	 if(D) Log.i("呼び出し2", "------");

	        	 startSearch("android startSearch", false, null, true); 	        	 

	         }
		          
	    });          

	    // 終了ボタン( ON DESTROY へと移行 )
	    Button btn3 = (Button) this.findViewById(R.id.button3);
	    btn3.setOnClickListener(new OnClickListener() {  
	    	  
	    	public void onClick(View v) {
	    		// 終了
	    		finish();
	        }
		          
	    });          

        // 呼び出しボタン( 自作アプリの結果取得 )
	    Button btn4 = (Button) this.findViewById(R.id.button4);
	    btn4.setOnClickListener(new OnClickListener() {  
	    	  
	         public void onClick(View v) {  
	
	        	 if(D) Log.i("呼び出し3", "------");
	        	 
	        	 Intent intent = new Intent();
	        	 intent.setClassName("jp.winofsql.app02", "jp.winofsql.app02.BatteryChangedActivity");
	        	 // 結果を取得する為の呼び出し( バッテリー残量の取得 )
	             startActivityForResult(intent,0);

	             Timer mTimer = new Timer(true);
	             mTimer.schedule( new TimerTask(){
	                 @Override
	                 public void run() {

	             		try{
		         			Context ctxt = createPackageContext("jp.winofsql.app02",0);
		        			FileInputStream input = ctxt.openFileInput("BatteryLevel.txt");  
		        			BufferedReader reader = new BufferedReader(new InputStreamReader(input));
		        			String line = reader.readLine();
		        			reader.close();
		                	Log.i(TAG, "--- タイマーの結果 ---");
		                	Log.i(TAG, line);

	             		}
	            		catch(Exception e) {
	                    	Log.i(TAG, e.getMessage());
	            		}
	                	 
	                 }
	             }, 1000);	             
	             
	        }
		          
	    });          

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        
        if(D) {
        	Log.i(TAG, "onDestroy に到達しました");
        	Log.i(TAG, "--- ON DESTROY ---");
        }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	if(D) Log.i("呼び出し結果", Integer.toString(resultCode));
    }
    
}
07-06 04:55:10.837: I/呼び出し1(331): ------
07-06 04:55:16.377: I/呼び出し2(331): ------
07-06 04:55:23.116: I/呼び出し3(331): ------
07-06 04:55:23.446: I/Battery(354): +++ ON CREATE : 初回の開始 +++
07-06 04:55:23.546: I/Battery(354): --- 再開 ---
07-06 04:55:23.556: I/Battery(354): icon-small
07-06 04:55:23.566: I/Battery(354): scale
07-06 04:55:23.566: I/Battery(354): present
07-06 04:55:23.566: I/Battery(354): technology
07-06 04:55:23.566: I/Battery(354): level
07-06 04:55:23.566: I/Battery(354): voltage
07-06 04:55:23.566: I/Battery(354): status
07-06 04:55:23.566: I/Battery(354): plugged
07-06 04:55:23.566: I/Battery(354): health
07-06 04:55:23.566: I/Battery(354): temperature
07-06 04:55:23.566: I/Battery(354): 50
07-06 04:55:23.566: I/Battery(354): --- 処理を終了します ---
07-06 04:55:23.616: I/Battery(354): --- 一時停止 ---
07-06 04:55:23.656: I/呼び出し結果(331): 50

参考

Activity | Android Developers
Intent | Android Developers
Log | Android Developers


posted by at 2012-07-04 21:30 | Android Java | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します