2025年3月
            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);
	}

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

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