Android開発 ファイルへ書き込んだ場合どこに保存されるのか?

OutputStreamWriterで書き込んだ場合、Androidのどこに保存されるのだろうか?

 

/data/data/パッケージ名/files以下に保存されます。

パッケージ名とはcom.example.testみたいな名前ですね。

 

ところがこれがすんなりアクセスできません。

普通にlsしてみるとpermission deniedとエラーが表示されます。

 

run-as パッケージ名でアクセスできるようになります。

files以下にファイルが保存されています。

 

run-asできない端末もあるようですが、Nexus5ではできました。

Android開発 Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE 解決方法

Eclipseエミュレーターでテストしていると Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE

 というエラーが出てきました。

 

1時間ハマりましたが、解決できました。

エラー内容ですが、アプリのAPKをインストールしようとしたけれど、ストレージがいっぱいでインストールできない、というエラーです。

 

コマンドでエミュレーターと接続します。

adb shell

dfコマンドでディスク容量を確認することができます。

f:id:androidkun:20150106163455p:plain

この/dataディレクトリが一杯なのでもうアプリインストールできないよ。

となっています。

/dataディレクトリのサイズを増やせばいいのですね。

ところがこれができません。

config.iniのdisk.dataPartition.size=400M これをいじっても起動オプションを追加しても変更できないようになっています。

 

一度ADBを削除し新規で作りなおすしかないようです。

Internal Storageを400MBでもすれば十分です。

変更後のdfの結果です。/dataが増えていますね。これでアプリをインストールし放題になります。

f:id:androidkun:20150106164005p:plain

 

 

Android開発 Nexus5のエミュレーターが起動しない場合の対策

EclipseでNexus5のエミュレーターがエラーになり起動しないことがあります。

 いくら待っても画面が真っ黒でAndroidのロゴが出ない、waiting Homeで止まります。

 

ハマりましたが、無事Nexus5のエミュレーションでテストすることができるようになりました。

AVDの設定を載せておきます。

 

CPU: Intel Atom

skin: WVGA800  //これ重要。 no sikin や dynamic hardwareでは起動しません。

ram: 512 //少ない方が良いようです。

f:id:androidkun:20150105132344p:plain

Android開発 複数のActivityをもつアプリ

Ancroidでは複数のActivityをもつことができます。

Intentを使ってデータを受け渡すことができます。

 

manifestにActivityを追加したことを記述する必要があります。

以下の内容をマニフェストに追加

<activity
android:name=".Activity2"//追加したアクティビティの名前
android:label="@string/app_name" >
</activity>

 

これをしないとエラーになります。

FATAL EXCEPTION: main
Process: com.example.MultiScreen, PID: 25526
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.MultiScreen/com.example.MultiScreen.Activity2}; have you declared this activity in your AndroidManifest.xml?

 

このActivityをマニフェストに追加しましたか?していないですよね?

追加してくださいよ。です。

 

アクティビティの追加 - Android入門

 

 

android開発 Intentを使って電話を掛ける方法

androidプログラムから簡単に電話をかけることができます。

 

Intent intent = new Intent(
Intent.ACTION_CALL,
Uri.parse("tel:1234567890"));

startActivity(intent);

 

またマニフェストに以下のパーミッションを追加する必要があります。

<uses-permission android:name="android.permission.CALL_PHONE"/>

 

パーミションを追加しない場合はエラーが表示されます。

FATAL EXCEPTION: main

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{42e111c8 14077:com.example.IntentTel/u0a96} (pid=14077, uid=10096) requires android.permission.CALL_PHONE

 

そのままですね。

IntentさんがCALL_PHONEのパーミションを必要としていますよ。

 

電話をかけるソースコードは - 逆引きAndroid入門

android開発 スマホのウィンドウサイズの取得方法

スマホの画面サイズを取得する方法です。

Display display = getWindowManager().getDefaultDisplay();
        Point p = new Point();
        display.getSize(p);
        Log.d("test", "Width=" + p.x);
        Log.d("test", "Height=" + p.y);

 

APIレベルは13以上になります。

Nexus5ではタイトルバーを表示する場合、1080 x 1776になりました。

 

Androidの画面サイズを攻略して機種依存を吸収する(ナビゲーションバーとステータスバーのサイズを取得する) | Tech Booster

android開発 Nexus5実機でのデバッグ

Eclipseのエミュレーションではなくスマホ実機でもlogcatすることができます。

確認方法はandroid-sdkについてくるmonitor.batプログラムです。

私の環境ではC:\adt-bundle-windows-x86_64-20140702\sdk\toolsの中にmonitor.batが入っています。

このフォルダをPathに加えるかランチャーに追加しましょう。

 

スマホのlogcatを見て簡単にデバッグすることができるようになります。

 

参考URL

Unity - IDEを起動せずにAndroid実機ログを見る方法 - Qiita