2018年8月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
ブログ:ココログ
時間のないサイト運営者リング
時間のないサイト運営者リング

Androidプログラミング

2015.02.18

getevent/sendeventでAndroid端末の操作自動化

リンク: getevent/sendeventでAndroid端末の操作自動化.

ほほー、なんかで使えそう。

2014.11.18

Android - Mac OS X Yosemiteでエミュレータが動かない時の対処法 - Qiita

リンク: Android - Mac OS X Yosemiteでエミュレータが動かない時の対処法 - Qiita.

2014.08.21

Androidでノイズ除去作ってみたが・・・(2)

NDKでメディアン部分をCで作ってみた。

MedianTestAndroid2.1.zip

Nexus7(2012)で測ってみた結果がこんな感じ。

001.jpg:1.2672秒
002.jpg:1.2042秒
003.jpg:1.1373秒
004.jpg:1.1525秒
005.jpg:1.1444秒
006.jpg:1.1462999999999999秒
007.jpg:1.1276秒
008.jpg:1.1260999999999999秒
009.jpg:1.1236000000000002秒
010.jpg:1.1218秒

Javaが6.5秒ぐらいだったんで、むっちゃ速い!てか、Dalvik遅すぎ。

2014.08.19

MrKagerou: Eclipseでandroid NDK使用していて「Unresolved Inclusion」でこまってしまった時

リンク: MrKagerou: Eclipseでandroid NDK使用していて「Unresolved Inclusion」でこまってしまった時.

なってしまったw

これでとりあえず直ったっぽい。

2014.08.12

[Android] 回転対応

Androidでは、画面の回転でアクティビティの破棄と生成が行われる。
つまり、アクティビティが保持するデータの破棄される。 データを破棄される前に保存して、生成されたら復元する必要がある。
アクティビティクラスのonSaveInstanceStateをオーバーライドして引数のBundleに保存してonRestoreInstanceStateをオーバーライドして引数のBundleから復元することで対応できる。

@Override
protected void onSaveInstanceState(Bundle outState) {
	super.onSaveInstanceState(outState);
	・・・
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
	super.onRestoreInstanceState(savedInstanceState);
	・・・
}

AndroidManifest.xmlファイルをいじると回転時の破棄、再作成されなくなるみたいだが、試してないので説明してるページのリンクを書いとく。

リンク:【Android】どんな端末でも画面回転時にActivityが初期化されないようにする

2014.08.11

Androidでノイズ除去作ってみたが・・・

リンク: Java8でノイズ除去作ってみたが・・・: ときどき日記4.0.

Androidでも作ってみた。

MedianTestAndroid2.zip
appcompat_v7関係で開くとエラーになるけど、これってどうしたらいいんだろー
(追記 21:58) すでにappcompat_v7がworkspaceに作られている状態だと、たぶんエラーにならなくなった。

Nexus7(2012)で測定してみた結果がこんな感じ。

 

001.jpg:6.9938秒
002.jpg:6.2264秒
003.jpg:6.51秒
004.jpg:6.6198秒
005.jpg:6.6396秒
006.jpg:6.617400000000001秒
007.jpg:6.6432秒
008.jpg:6.624秒
009.jpg:6.5998秒
010.jpg:6.566秒

2014.07.21

[Java,Android] CPUコア数の取得

JavaでCPUコア数の取得方法って、
意外となかなか見つけれなかったのでメモっとく。

        int core = Runtime.getRuntime().availableProcessors();

で、論理コア数が取れる。

Androidだと、SDKの説明によると
4.2以上は最大コア数で、
それ以前は、オンラインになっているコア数。つまり、省電力モードや熱などで動作コア数が変化する場合はそのコア数になるようです。

2014.07.07

[Androidプログラミング] メモリ不足・・・

ちょーしにのって

リンク: Java8でノイズ除去作ってみたが・・・

で作ったやつをAndroidに移植してみたが、メモリ不足で動かん!!

調べてみると

リンク: ネタ帳 A.B.C: AndroidのlargeHeap(オレと皆さま調べ).

に、Nexus7(2012)だと、そのままだとヒープが64MBとなっている。
使うJpegイメージがだいたい2500×3500なんで
1枚約33MBをメモリ上で使用することになるんで
元イメージとメディアン後イメージの2枚必要なので
33×2=66MB必要になる。うん、たりんな(^^;)

AndroidManifest.xmlのapplicationにandroid:largeHeap="true"を追加してためしてみるか。

2014.04.20

[Androidプログラミング] Storage Access Frameworkを使ってみる(2)

前の続き〜

次のように呼び出すと、ファイルを作成する画面(作成するファイル名やフォルダを指定する画面)が表示されます。


	Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
	intent.setType("*/*");
	intent.putExtra(Intent.EXTRA_TITLE, "hoge.txt");	// <== デフォルトのファイル名
	startActivityForResult(intent, REQ_CREATE);	// <== REQ_CREATEはアクティビティのどこかで定義しておく。

次は結果を受けとるところです。
onActivityResultをオーバーライドして次のようにします。


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	if(requestCode == REQ_CREATE) {
		Toast.makeText(this, data.getData().toString(), Toast.LENGTH_LONG).show();
		Uri uri = data.getData();
		
		try {
			OutputStream fstream = getContentResolver().openOutputStream(uri);

			OutputStreamWriter ostream = new OutputStreamWriter(fstream);
			BufferedWriter buf = new BufferedWriter(ostream);
			
			buf.write("ほげほげ");
			buf.close();
			
		} catch (FileNotFoundException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
	super.onActivityResult(requestCode, resultCode, data);
}

と、言う感じ。

2014.04.19

[Androidプログラミング] Storage Access Frameworkを使ってみる(1)

Android 4.4から追加された機能でファイルへのアクセスをするAPIです。アプリに対してはWindowsでいうところのファイルアクセス用のコモンダイアログのようなものが用意されています。また、ドキュメントプロバイダーが用意されていればクラウドストレージ(別にクラウドストレージでなくてもいいようです)へもこれを通じてアクセスできます。

次のように呼び出すと、ファイルを選択する画面が表示されます。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQ_OPEN);	// <== REQ_OPENはアクティビティのどこかで定義しておく。

setTypeでMIMEタイプを設定しおくと選択できるファイルが制限されます。

これでファイル選択するアクティビティが表示されるので次は結果を受けとるところです。 onActivityResultをオーバーライドして次のようにします。

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(requestCode == REQ_OPEN) {
			if(resultCode == RESULT_OK) {
				Toast.makeText(this, data.getData().toString(), Toast.LENGTH_LONG).show();
				Uri uri = data.getData();
				ParcelFileDescriptor pfd;
				
				try {
					pfd = getContentResolver().openFileDescriptor(uri, "r");
	
					FileDescriptor fd = pfd.getFileDescriptor();
					
					FileInputStream fstream = new FileInputStream(fd);
					InputStreamReader istream = new InputStreamReader(fstream);
					BufferedReader buf = new BufferedReader(istream);
					
					String str;
					while((str = buf.readLine()) != null) {
						Log.d("HOGE", str);
					}
					buf.close();
					
				} catch (FileNotFoundException e) {
					// TODO 自動生成された catch ブロック
					e.printStackTrace();
				} catch (IOException e) {
					// TODO 自動生成された catch ブロック
					e.printStackTrace();
				}
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

と、こんなふうに行う。
決め打ちでテキストファイルってことにして処理しますが、適当に変更して下さい。(笑)

ファイルの新規作成もあるのでまた今度(^_^;)

2014.04.16

[Androidプログラミング] 無線LANを使ってAndroidアプリの実機デバッグ

まず、Android SDKのadbがコマンドプロンプト(or ターミナル)で使えるようにパスを通しておく。

Android上でIPアドレスを調べておく。

Android実機をつないだ状態でコマンドプロンプトで

adb tcpip 5555

を実行します。5555はポート番号。次に

adb connect 192.168.0.2:5555

を実行。192.168.0.2は調べておいたAndroidのIPアドレスに置き換えてください。"connected 192.168.0.2:5555"のようなメッセージが出たらOK。

ここでUSBケーブルを抜きます。接続できているか確認するには、

adb devices

を実行すると、

List of devices attached
192.168.0.2:5555    device

と表示されます。

これでeclipseなどからデバッグ可能になります。

2014.04.14

[Androidプログラミング] GestureDetectorとScaleGestureDetector

GestureDetectorとScaleGestureDetectorでピンチイン、ピンチアウト、タップや
ダブルタップに対応したときのメモです。

ActivityはOnGestureListener, OnDoubleTapListenerをインプリメントしておいて

GesttureDetectorとScaleGestureDetectorの変数を宣言する。


	protected GestureDetector mDetector; 
	protected ScaleGestureDetector mScaleGestureDetector; 

ActivityのonCreateで


	mDetector = new GestureDetector(this, this); 
	mDetector.setOnDoubleTapListener(this); 
	mScaleGestureDetector = new ScaleGestureDetector(this, this);

と、ジェスチャーを受け取るViewに対して


	View v = (View)findViewById(R.id.View1); 
	v.setOnTouchListener(new View.OnTouchListener() { 
		 
		@Override 
		public boolean onTouch(View v, MotionEvent event) { 
			boolean inProg; 
			 
			inProg = mScaleGestureDetector.isInProgress(); 
			mScaleGestureDetector.onTouchEvent(event); 
			if(inProg || mScaleGestureDetector.isInProgress()) { 
				return true; 
			} 
			 
			return mDetector.onTouchEvent(event); 
		} 
	});

としておく。

ViewのonTouchでは、
まず、今、ピンチイン、ピンチアウト中かを保存しておいて、ScaleGestureDetectorのonTouchEventを呼び出し、ピンチイン、ピンチアウト中に入ったり、呼び出し前にすでに入っている場合は処理したことにして終了する。ピンチイン、ピンチアウト中でなかったらGestureDetectorのonTouchEventを呼び出し、タップやダブルタップなどの認識処理にまわすようにする。

次に正しくタップやダプルタップを取るための各イベントでの処理を示します。

OnGestureListenerのイベント

onDown trueを返さないと次のイベントが正しく発生しないようです。
onFling フリックで発生するイベント。特に返す値は関係なさそう?
ピンチイン、アウトの終了後に発生する場合があるので何らかの対策をするべきかな?
onLongPress ロングタップで発生するイベント
onScroll スクロールで発生するイベント
onShowPress 特に何もしなくていいのかな?
onSingleTapUp シングルタップアップイベント。OnDoubleTapListenerのイベントで認識するので特何もしなくていい。OnDoubleTapListenerを使わない場合はここでタップの処理を行うのかな?

OnDoubleTapListenerのイベント

onDoubleTap ダブルタップのイベント。ここでダブルタップイベントの処理を行う。
onDoubleTapEvent 特に何もしない。実際、ダブルタップを行うとonDoubleTapのあとにonDoubleTapEventが2回来るのでonDoubleTapでダブルタップの処理を行ってこっちでは何もしないのでいいのかな?
onSingleTapConfirmed シングルタップのイベント。タップの処理をここで行う。

OnScaleGestureListenerのイベント

onScale ピンチイン、アウト中に発生する。
onScaleBegin ピンチイン、アウト開始時に発生する。
onScaleEnd ピンチイン、アウト終了時に発生する。

2013.10.26

日経ソフトウェア12月号 特別付録 「Android UIパーツ活用ガイド」 ちょっといいかも。

特別付録 「Android UIパーツ活用ガイド」のPart 2 システムリソース編がちょっといいかも。

2013.10.24

ダダ漏れ日記: Android・・・テキスト描画あれこれ, ascent(), descent()等

リンク: ダダ漏れ日記: Android・・・テキスト描画あれこれ, ascent(), descent()等.

そか、STROKEいれると太くなるのか。

2012.11.13

Android 1.6のXML DOM変?

XMLでは、

"&"や"<"を"&"や"<"に置き換えるんだが
Android 1.6のXML DOMで"&"や"<"を含むファイルを読み込むと
ちゃんと"&"や"<"に戻してくれない。バグ?
Android 4.1.2で同じプログラムを動かすとちゃんと戻してくれるんだよな~
どーしよー。
読み込みたいXMLファイル自体は単純なんで自力で読み込むかな・・・
(追記)
XmlPullParserを使えばうまいこといきそー
なので、それで実装し直してみる。

続きを読む "Android 1.6のXML DOM変?" ≫


Google

サーチする:
Amazon.co.jp のロゴ









携帯URL