Android 外部ストレージのパスの違い

Android

Android 外部ストレージのパスの違い

Androidの外部ストレージのパスの取得方法が色々あるんですが、ちょっとずつ違い、そしてややこしいので、自分でまとめておきます。

初めに、外部ストレージと言っても、必ずやSDカードをさすわけではありません。リムーバブルなメディアをさすわけでもなく、まぁ歴史的な由来から、内部でInternal storageとExternal storageと分かれているようです。(紛らわしいので辞めてほしい(>_<)) じゃあ、違いってなんなの?とお思いでしょうから、下記のサイトの日本語訳ではありますが、載せておきます。 http://developer.android.com/training/basics/data-storage/files.html

  • 内部ストレージ(Internal storageとは)
  1. 常に使える
  2. そのファイルを作ったアプリしかそのファイルにアクセスできない
  3. アプリのアンインストール時にファイルも自動的に削除される
  • 外部ストレージ(Internal storageとは)
  1. 常に使えるとは限らない。ユーザーがUSB経由でストレージとしてパソコンなどからマウントしてたり、スマートフォンから取り外されているかもしれない
  2. ファイルを作ったアプリ以外からアクセスできる
  3. アプリをアンインストールの際は、getExternalFilesDir()で作ったファイル以外は自動的に消去されない

さて、肝心のメソッドの使いわけです。

下記を使うと、デフォルトの外部ストレージ内のアプリ個別のフォルダに入れてくれます。

例:Experia SO-04Dだと
/mnt/sdcard/Android/data/アプリのパッケージ名/files/Pictures/ 
になります。

 
 File file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
 

下記を使うと、デフォルトの外部ストレージのルートが指定されます。

例:Experia SO-04Dだと
/mnt/sdcard/Android/data/アプリのパッケージ名/files/Pictures/ 
になります。

 
 File file = new File(Environment.getExternalStorageDirectory().getPath());

デフォルトの外部ストレージのルートを指定すると、ここにごちゃごちゃファイルがたまってしまうので、避けたほうがよいでしょう…

すみません!時間の都合で使い訳とかいいながら、2つしか紹介できませんでした(つД`)

俺たちの戦いはまだ終わらない!
いつか更新します!!!

Android 実機でデバッグ中偽の位置情報をテストする

Android

Android 実機でデバッグ中偽の位置情報をテストする

この記事を書いている時点の情報なのですが…

Androidで位置情報を利用するアプリを作っている時、悩ましいのがデバッグですよね。
エミュレーターであれば、DDMSからGPSの緯度・経度情報をエミュレーターで送れますが、実機に偽の緯度・経度を送ることはできないようです。

下記のサイトにあるように、ADBとかを利用すると、いかにもできそうですが、

http://stackoverflow.com/questions/2531317/android-mock-location-on-device

 $ telnet localhost 5554
 Android Console: type 'help' for a list of commands
 OK
 geo fix -82.411629 28.054553
 OK

これはエミュレーターの場合だけですから!!残念!
…本当に残念です。

なので、Fake GPS locationのような疑似ロケーションを作るアプリを使うのが手っ取り早いです。

https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=ja

ちなみに、私がやりたかったことは、スリープ時に移動したらどうなるかを試したかったんですね。なので、Fake GPS locationではそれが試せないので、結局うまく試せなかったところです。

何かいいやり方をご存じの方は、教えてください。

よろしくお願いいたします。

Android 改行について

Android

改行が無視される!?

WEBで入力された文字列を渡しAndroidで表示させる、という処理で、
Androidで表示しようとしたら改行が無視された(半角スペースが入っている?)。
以下のように、複数行OKの設定をしないとダメなようですね。

 txtView.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

とりあえず、これで出来たので今回はこれで調査終わり。
また他にも出てきたら追記していきます。

Android 既存のファイルシステムからプロジェクトを作る

Android

Android 既存のファイルシステムからプロジェクトを作る

  1. EclipseのPackage Explorerの何もないところを右クリックして、Importをクリックします。
  2. Android → Existing Android Code Into Workspace をクリック

General→File Systemだと 「Source is in the hierarchy of the destination.」となってエラーでインポートできません。

  1. Root Directoryと書いてあるところの右のBrowserをクリックし、インポートしたいディレクトリを選択します。
  2. Invalid project description.となってしまう場合は、すでにEclipseのWork spaceに同じ名前のプロジェクトがあるか、そもそも同じWork spaceからインポートしようとしているというケースです。work spaceとは違う場所からimportしましょう。

Android 日本語でフォーマットされた日付を返すサンプルコード

Android
Java

Android 日本語でフォーマットされた日付を返すサンプルコード

Calendarを使って、日本語でフォーマットされた日付(2013年11月21日 11時30分)を返します。
何度か使いそうなので、書いておきます。

 //src内
 public static String getJapaneseDate(Calendar calendar, Context context){
 	
 	int year = calendar.get(Calendar.YEAR);
 	int month = calendar.get(Calendar.MONTH) + 1;
 	int date = calendar.get(Calendar.DATE);
 	int hour = calendar.get(Calendar.HOUR_OF_DAY);
 	int minute = calendar.get(Calendar.MINUTE);
 		
 	String japanese_date = Integer.toString(year) + context.getString(R.string.year) 
 			+ Integer.toString(month) + context.getString(R.string.month) 
 			+ Integer.toString(date) + context.getString(R.string.date) 
 			+ Integer.toString(hour) + context.getString(R.string.hour) 
 			+ Integer.toString(minute) + context.getString(R.string.minute); 
  		
 	return japanese_date;
 		
 }
 //strings.xml内
 <string name="year">年</string>
 <string name="month">月</string>
 <string name="date">日</string>
 <string name="hour">時</string>
 <string name="minute">分</string>