getevent/sendeventでAndroid端末の操作自動化
リンク: getevent/sendeventでAndroid端末の操作自動化.
ほほー、なんかで使えそう。
リンク: getevent/sendeventでAndroid端末の操作自動化.
ほほー、なんかで使えそう。
NDKでメディアン部分をCで作ってみた。
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遅すぎ。
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ファイルをいじると回転時の破棄、再作成されなくなるみたいだが、試してないので説明してるページのリンクを書いとく。
リンク: Java8でノイズ除去作ってみたが・・・: ときどき日記4.0.
Androidでも作ってみた。
MedianTestAndroid2.zipappcompat_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秒
JavaでCPUコア数の取得方法って、
意外となかなか見つけれなかったのでメモっとく。
int core = Runtime.getRuntime().availableProcessors();
で、論理コア数が取れる。
Androidだと、SDKの説明によると
4.2以上は最大コア数で、
それ以前は、オンラインになっているコア数。つまり、省電力モードや熱などで動作コア数が変化する場合はそのコア数になるようです。
ちょーしにのって
リンク: 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"を追加してためしてみるか。
前の続き〜
次のように呼び出すと、ファイルを作成する画面(作成するファイル名やフォルダを指定する画面)が表示されます。
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);
}
と、言う感じ。
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);
}
と、こんなふうに行う。
決め打ちでテキストファイルってことにして処理しますが、適当に変更して下さい。(笑)
ファイルの新規作成もあるのでまた今度(^_^;)
Android Androidプログラミング chumby EMONSTER EM・ONE HT-03A HYBRID W-ZERO3 IDEOS iOSプログラミング iPad iPhone iPod Java Javascript Javaプログラミング Kindle本セール Linux Linuxプログラミング Mac MSX NetWalker PSP Ruby Swift T-01A Touch Diamond(S21HT) TypeScript VAIO type U W-ZERO3 WILLCOM D4 WILLCOM03 Windows Windowsプログラミング WinRT X02HT ときどき日記せかんど? へもへも写真集 アニメ・コミック ウェブログ・ココログ関連 オルガル ゲーム スポーツ ニュース パソコン・インターネット フリーソフト プチコン3号 プログラミング メモ 人工無脳のつぶやき 写真・カメラ 動画 携帯・デジカメ 旅行・地域 日記・コラム・つぶやき 映画・テレビ 書籍・雑誌 玄箱 芸能・アイドル 電子書籍 音楽
最近のコメント