サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
inujirushi123.blog.fc2.com
Android では指定された時間、または、一定時間毎に処理を実行するために AlarmManager が用意されています。 例えば、10秒毎にサービスを実行するには以下のように記述します。// 実行するサービスを指定する PendingIntent pendingIntent = PendingIntent.getService(context, 0, new Intent(context, SampleService.class), PendingIntent.FLAG_UPDATE_CURRENT); // 10秒毎にサービスの処理を実行する AlarmManager am = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_RE
ゲームエンジンとして人気の Unity を使って、MMD (MikuMikuDance) の3Dモデルを Android で表示してみました。 ■ Unity Unity 公式サイト(日本語)の Download より Unity をダウンロードしてください。 http://japan.unity3d.com/ 2014/02/09時点の最新は Unity 4.3.4 Unity Pro は有料ですが、無料版の無印 Unity でも十分な機能を有しています。 (年商10万ドル以上の企業は無料版の利用不可) ダウンロードした UnitySetup-4.3.4.exe ファイルを実行してインストール。 プログラミングは JavaScript と C# をメインに使います。 標準エディタとしてインストールされている MonoDevelop ver.4.0.1 は日本語入力できないので要注意。 半
Android では外部領域(内部ストレージ/外部ストレージ)へアクセスするためには、アクセスを行うアプリ毎に WRITE_EXTERNAL_STORAGE または READ_EXTERNAL_STORAGE をパーミッションに設定する必要があります。 パーミッションを設定せずに外部領域にアクセスすると SecurityException が発生します。 Android 4.4 (KitKat / API 19) からはこの外部領域における、自身のアプリケーション領域 Context#getExternalFilesDir(String type) へはパーミッションなしでもアクセスできるようになりました。 ただし、このアクセス許可は自身のアプリケーション領域のみを対象としており、全てのアプリケーションが共有する領域 Environment#getExternalStoragePublic
Android のレイアウトで均等割付を行うには LinearLayout の android:layout_weight を使います。 この layout_weight は View に対するウェイト(重み)を指定し、余白を割り当てます。 余白を割り当てるため、均等割りを行うのであればサイズ指定を 0dp にする必要があります。 ・ vertical (縦並び)であれば android:layout_height="0dp" ・ horizontal (横並び)であれば android:layout_width="0dp" 割り当てられるサイズは『 余白 × layout_weight ÷ layout_weight の合計 』になります。 layout_weigh が定義されていない、または 0 の時、余白は割り当てられません。 もしサイズ指定を 0dp 以外にした場合、指定したサイズ
SDカードのマウント先について色々調べたところ、/system/etc/vold.fstab に書かれていることがわかった。 fstab は、OS起動時にファイルシステムをマウントするなど、デバイスファイルとマウントポイントなどを設定します。 【参照】UNIX Life - fstabの設定 より android の vold.fstab は形式も違うがやってることは同じ…はず… vold.fstab の形式は以下のようになっています。 ---------------------------------------------------------------------- ※ GALAXY Tab 7.0 Plus SC-02D のコメントより抜粋 dev_mount [label] [root_mount_point] [part] [subsystem] [sysfs_path1.
以前書いた『デバイスにSDカードがマウントされているかチェックする』で SDカードのマウント状態を確認にはLinuxのmountコマンドを使うと書きました。 Linuxのコマンドを直接使うのに抵抗があったので調べてみたところ /proc/mounts でシステムが使用中のマウント一覧が取得できるみたい。 ※ 取得できる情報は Runtime.getRuntime().exec(String prog) で mount を実行したときと同じです /proc/mounts については Red Hat Enterprise Linux 4: システム管理入門ガイド などを見てください。 で、せっかく調べたので /proc/mounts を使った場合のマウントチェックを作りました。 結果は変わりませんが、コードは若干短くなります。 /** * 指定されたパスがマウントされているかチェックする。 *
Date: Sun 04 08 2013 Category: Android Response: Comment 0 Trackback 0 Android 2.1 ~ 向け ActionBar : ActionBarActivity (Android Support Library r18) Android 3.0 (API 11) から追加された ActionBar。 Android Design でも重要視されているユーザインターフェースで、従来のタイトルバーの代わりにアプリのアイコン、タイトル名、オプションメニューを配置できるウィジェットです。 従来のタイトル ActionBar ActionBar は Android 3.0 から追加されたため、それ以前の Andoroid 2.x では使うことができません。 そこで API Level 間の違いを解消するための Suppor
Androidでは画面を回転させると画面の向きに合わせたレイアウトを読み込もうとしてアクティビティを再構築(onDestory→onCreate)します。 アクティビティが再構築されるとその画面で入力された値などがクリアされてしまうため、対策を行う必要があります。 対策としては以下の4つの方法があります(俺が知る限りでは…) ・アクティビティの設定変化をハンドリング ・画面の向きを固定化 ・Bundleに設定(一時保存) ・SQLiteやPreferenceなどへの保存(永続保存) 最後のSQLiteやPreferenceなどへの保存は画面の回転に限った話ではないので今回は除外します。 以下、その他3つの設定方法です。 参考サイト:ソフトウェア技術ドキュメントを勝手に翻訳 - 7.3 実行時の変化への対処 【アクティビティの設定変化をハンドリング】 アクティビティの設定の変更ハンドリングを
Android ではデバイス毎に画面サイズと解像度が異なるため、デザインする際のサイズ指定に困ります。 そこでレイアウトのサイズ指定では dip/dp を使ってサイズ指定を行います。 dip (Density Independent Pixel) とは、解像度に応じてサイズを変える単位です。 この dip を指定することで画面上のサイズを統一することができます。 ※ dip = dp で、ここでは文字数の少ない dp を使います。 さて、この dip が何 px なのかを計算するには解像度を知る必要があります。 解像度は DIP (Dots Per Inch) と呼ばれ、1インチ幅のドット数を表します。 【Android の解像度 (2/13/02/23 時点)】 ldpi : 120 dpi mdpi : 160 dpi hdpi : 240 dpi xhdpi : 320 dpi xx
作成したアプリのテストでボタンを連打したとき、イベントが2回走ってしまったりすることはありませんか? 例えば、次のアクティビティに遷移するボタン。 クリック時には本来1つのアクティビティしか開かないはずです。 しかし、ボタンを連打することで二重(多重)に開いてしまうことがあります。 これを制御するには以下のような方法があります。 ①クリックから一定時間、次のイベントを禁止する ②フラグ管理によりイベントが完了するまで次のイベントを禁止する とりあえず思いつくのは2つ。他にもあれば教えてください。 ①クリックから一定時間、次のイベントを禁止する// クリックイベント @Override public void onClick(View v) { // 前回クリックから一定時間経過していなければクリックイベントを実行しない if (!CommonUtils.isClickEvent()) re
久しぶりに色々いじろうと少し昔に作ったアプリを動かしてみたところ、操作中に突然 java.lang.NoClassDefFoundError が発生して終了してしました。 発生したのは外部jarのメソッドを呼び出しているところ。 昔は動いていたのになぜだろう?と調べたら ADT 17以降の外部Jarの扱いが変わったのが原因でした。 【参考サイト】 Yet Another Diary - Androidで外部JarがAPKファイルに取り込まれなくなった時の対処法 【原因】 Android SDK Tools r17以降、外部Jar は libs フォルダで管理されるようになりました。 いままでは lib フォルダなどに入れてビルド・パスからJar追加をしていましたが、これからは libs フォルダに .jar ファイルが入っていれるだけで勝手に組み込んでくれるようになりました。 あら便利!!
Android NDK (Native Development Kit) とはアプリケーションの一部(または全て)をネイティブコード(機械語)である C/C++ 等を用いて高速化するための仕組みです。 ※ アプリ開発に携わっているとネイティブアプリと耳にすることがあると思いますが別物です。 参考サイト: TM Life - Webアプリとネイティブアプリの違いについてまとめてみた Android NDK の環境は、Android SDK同様に導入当初よりずいぶん変わりました。 ADTr20 からは NDK Plugin (Android ネイティブ開発ツール) が含まれているため、コンパイルのために Cygwin 等をインストールする必要がなくなっています。 参考サイト: Happy my life - ADTr20ではNDKなプロジェクトが簡単に作れるようになってた ※ ADTr19以下
参考サイト:Waku Waku Java - 講座1 ダブルバッファリング ダブルバッファリングとは、画面のちらつきを防ぐための技術です。 一般的な描画は、画面を一度クリア(もしくは塗りつぶし)してから背景、キャラクターと描いていきます。 キャラクターを動かしたりなどのアニメーションを行うときはコレを繰り返し行います。 通常の描画の場合、画面に直接描画を行っています。 そのため、画面をクリアした際に何も無い画面が一瞬見えてしまうために画面がちらついて見えてしまうことがあります。 そこでダブルバッファリングの出番です。 ダブルバッファリングでは、表示されている画面とは別に、裏にもう一つの画面(オフスクリーン・バッファ)を持ちます。 裏の画面で描画を行い、描画が完成したら表の画面と入れ替えることで描画している姿を見せないようにしています。 これによりクリアされた画面が見えないためにちらつきを防
2014年4月7日19時からユニティちゃんの3Dモデルのデータ配信が始まりました! UNITY-CHAN! OFFICIAL WEBSITE 管理人はC85で存在を知って、それから密かに配信待ちしてたわけですが、データ配信開始から1週間たってます。記事にするの遅いです。すみません。 さて、今回はユニティちゃんの紹介ですので Android は関係ありません。 代わりに Unity Web Player を使った動作確認用のサンプルを作って載せてます。 ■ ユニティちゃんとは ユニティちゃんは Unity のオフィシャルキャラクターです。擬人化キャラではありません。 (以下、公式原文まま) Unity を愛して支えてくれている開発者コミュニティの皆様への感謝を込めて、彼らのゲームで使うことのできるハイクオリティ、かつハイエンドゲームに必要とされる機能を備えつつも、ユーザーに愛される十分なキャ
Android NDK を使用する際に起こった問題の解決方法をまとめました。 その他の問題は『Android トラブルシューティング』を参照してください。 CDT プラグインがインストール / アップデートできない ADTr20未満、または、ADTr20未満からADTr20以上にアップデートした場合、NDK Plugin が含まれていません。 その場合、ADTの再インストール、または、CDTのインストールを行います。 CDT のインストールは以下から行います。 Eclipse の [ヘルプ(H)] - [新規ソフトウェアのインストール] Android Developer Tools Update Site - http://dl-ssl.google.com/android/eclipse/ このとき、以下のようなエラーが発生することがある。 インストールする項目の収集中にエラーが発生し
【関連記事】外部SDカードについてまとめるまえのメモ Androidでは、ストレージ(SDカードなど)のパスを取得するために Environment.getExternalStorageDirectory() が用意されています。 しかし、ストレージが内部ストレージ(取外不可)と外部ストレージ(取外可能)に別れている場合、内部ストレージを取得します。 外部ストレージを取得する Android API は用意されていません。 そこで開発者は色々な方法を使って、外部ストレージのパスを取得しています。 で、私も色々と試しました。こんな感じに。 ×環境変数に登録されているパスを取得する ⇒ 環境変数がバラバラ。そもそもHTC端末など、一部の端末は登録されていない。 ×環境変数と、一部特殊なパスは直書きで対応する ⇒ 種類が多すぎて対応しきれない ×シンボリックリンク参照 ⇒ 設定されていないデバイ
MapFragment / SupportMapFragment を静的に実装(レイアウトXMLで定義)するには <fragment> タグを使います。 MapFragment を使うには Google Play Services (rev.3 ~) のライブラリ・プロジェクトが必要です。 まだ作成されてない方は以下の記事を参考に作成してください。 ・Google Maps Android API v2 試してみた ・Google Maps Android API v2 導入の仕方 レイアウトXMLで定義できる情報は以下のとおり。 【構文】(例として東京駅を中心とした値を入れています)<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/andro
MapFragment / SupportMapFragment への機能追加は簡単に行えます。 この記事では『屋内マップの表示切替』『現在地表示機能』『マーカー表示』『アニメーションによるカメラ移動』の実装コードを記載しています。 以下のソースコードは Google Play services に含まれているサンプルソースを参考に作っています。 ${ANDROID_SDK}/extras/google/google_play_services/samples/maps/src/com/example/mapdemo/ マーカーをタップで吹き出し表示。 マップ長押しで東京駅へカメラがアニメーション移動します。package jp.inujirushi.android.mapsv2; import android.os.Bundle; import android.support.v4.ap
------------------------------------------------------------ (2012/11/27 追記) この記事では外部ストレージのパスは取得しきれませんでした。 最新の『外部ストレージのパスを取得する(Android 2.2~?)』を参照してください。 ------------------------------------------------------------ SDカードのパスは Android API を使って取得することが出来ます。 // Environmentクラスから取得 File file = Environment.getExternalStorageDirectory(); String sdcard = file.getPath(); // 文字列で指定するのはダメ絶対 // String sdcard = "
Intent#setFlags はstartActivity()によりアクティビティを起動する際に、アクティビティのタスクへの関連付けの変更に使用します。 関連付けを変更することで、スタックにつまれたアクティビティを削除するなどできます。 Reference: Intent ソフトウェア技術ドキュメントを勝手に翻訳 - 1.3 タスクとバックスタック - タスクの管理 ■ ソースコードで定義 -----------------------------------------Intent intent = new Intent(this, NextActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); ■ インテントフラグ種類 ---------------------
アクティビティ、または、アプリを終了させるには複数の方法が存在します。 この記事を書くにあたり、てくめも様のSystem.exit() を使ってはいけない理由と、終了方法のまとめを参考にさせて頂きました。 ①Activity#finish() アクティビティをライフサイクルに沿って正しく終了させる唯一の方法。 起動アクティビティの場合は、アプリを終了する(※)。 終了と書いてあるが、Android OSに対して終了通知を送るだけで、呼び出された直後に終了するわけではない。 そのため、finish()以降に処理が記述されていれば記述された処理は実行されてしまう。 なお、Android端末の戻るボタン押下時にも呼ばれている。 ※ここでのアプリ終了はアクティビティが全て閉じられた状態であり、プロセスを完全に終了させるわけではない。プロセス終了のタイミングはAndroidのOSに依存する。 ②Ac
今回はカスタマイズした ListView に CheckBox を乗せたときの on/off 切替を行選択時に行う方法の紹介。 ListView(の項目)にCheckBoxを乗せた場合、CheckBoxのon/off切替はCheckBoxをクリックした時だけになります。 しかもCheckBoxが項目のフォーカスを奪ってしまっているため、onItemClickイベントが発生しなくなっています。 そこで、CheckBoxが項目から奪っているフォーカスを項目にお返しし、onItemClickイベントでCheckBoxの on/off を切り替えるようにします。 これはレイアウトの <CheckBox> に以下の2つの属性を追加することで対応できます。 android:clickable="false" CheckBoxにフォーカスを当たらなくし、onItemClickイベントを発生するようにしま
以前、レイアウトXMLで定義されているウィジェットの取得方法を紹介しました。 今回は、レイアウトXML自体をソースコード上にViewとして取得する方法を紹介します。 レイアウトXMLを取得するには LayoutInflater#inflateメソッドを使用します。 そこで、まず最初にContextから LayoutInflaterクラスを取得するのですが、なんと3種類の方法があります。 ※ 以下のソースコードは Activityクラス内で呼ばれています。 // コンテキストから取得 LayoutInflater inflater1 = LayoutInflater.from(this); // アクティビティから取得 LayoutInflater inflater2 = getLayoutInflater(); // システムサービスから取得 LayoutInflater inflater
このページを最初にブックマークしてみませんか?
『戌印-INUJIRUSHI- (Androidあれこれ)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く