2014年2月20日木曜日

エラー (ADT のこのバージョンは Android SDK ツールの改訂 ~)This Android SDK requires Android Developer Toolkit version or above. Curre...version is Please update ADT to the latest version.


eclipseを立ち上げたら、こんなエラーがでた!!

ADTのバージョンが古いのかな??

SDKツールとか言っているので、




SDKマネージャーを立ち上げ

~22.3と書いてあったので、
Android SDK Toolsにチェックを入れて、インストール




eclipseを再起動したら、OK!!

ダイアログは出現しなくなりました!!


が、しかしBuildが上手くできない!!
R.~がエラーになる


Android SDK Build-toolsもインストールしなければダメぽ


2014年2月17日月曜日

ファイルの書き込み、生成(FileOutputStream, file:///data/data/)

ファイルの読み込みをやったので、今回はファイルの書き込みを。

//アウトプットストリームの生成
openFileOutput( ファイル名:String型, モード:int型)

こんな感じで使います。↓
FileOutputStream oOutStreame = openFileOutput( "test.htmk", MODE_PRIVATE );

モードの定数はこちら

MODE_WORLD_READABLE   他のアプリから参照可
MODE_WORLD_WRITEABLE  他のアプリから書き込み可
MODE_PRIVATE                他のアプリからアクセス不可
MODE_APPEND                  ファイルがあると、追記


また、モードを複数指定する場合には
パイプを繋げると複数指定できます。

MODE_PRIVATE | MODE_APPEND


また、ファイルの保存場所は

file:///data/data/" パッケージ名 + /files/ + 作成したファイル名

こちらになります。

SDカードに保存する方法に関しては、また今度


■サンプルソース
package com.example.filemgr;

import java.io.FileOutputStream;
import java.io.IOException;

import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;
import android.widget.LinearLayout;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  //ファイル名
  String sFileName  = "test.html";
  //書き込み内容
  String sText      = "<font color=\"red\">Goodbye World!!</font>";
  try {
           //アウトプットストリームの生成
    FileOutputStream oOutStreame = openFileOutput(sFileName, MODE_PRIVATE | MODE_APPEND);
//アウトプットストリームに書き込み
  oOutStreame.write(sText.getBytes());
  } catch (IOException e) {
  // TODO 自動生成された catch ブロック
e.printStackTrace();
  }
  //WebViewの生成
        WebView oWebView = new WebView( getApplicationContext() );
  //ファイルの保存先はこちらだ↓    "file:///data/data/パッケージ名 + files + 作成したファイル名

        String sUrl = "file:///data/data/" + getPackageName() +"/files/" + sFileName;oWebView.loadUrl( sUrl );
      
  //レイアウトの生成とテキストの貼り付け
        LinearLayout oLayout = new LinearLayout(getApplicationContext());
        oLayout.addView(oWebView);
        //レイアウトを表示
        setContentView(oLayout);
  }
}

■実行結果



今回は拡張子をhtmlにしましたが基本的には、何でも大丈夫です。
注意点としては、ファイルを書き込む際にフルパスを指定しないことです。


2014年2月9日日曜日

ローカルファイルの読み込み(getAssets(), BufferedReader)

これの続きです。
前回は「assets」の配下に「test.html」を作成して、
そのファイルをhtmlとして、読み込みましたが、
今回は中のファイルに何が書かれているかを見たいと思います。

注意点としては、assets配下のファイルは読み込みはできるけど、
書き込みはできません。
もう一度言います。
assets配下のファイルは読み込み可、書き込み不可です。
自分は書き込みをしたくて、一週間くらい調べましたができませんでした。

できる方法もあるかもしれませんが。。。 
リファレンス的には読み込み専用となっています。

http://developer.android.com/reference/android/content/res/AssetManager.html


■サンプルソース
package com.example.filemgr;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.os.Bundle;
import android.app.Activity;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //インプットストリームの作成
        InputStream oInStream;
        String lineBuffer;
        String str = "";
        try {
            //assetsに存在するtest.htmlを開くという命令
            oInStream = getAssets().open("test.html");
            //リーダーでインプットストリームの内容を読む
            BufferedReader reader= new BufferedReader(new InputStreamReader(oInStream,"UTF-8"));
            while( (lineBuffer = reader.readLine()) != null ){
                str = str + lineBuffer;
            }
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }

        //テキストビューの作成
        TextView oTextView = new TextView(getApplicationContext());
        oTextView.setText(str);

        //レイアウトの生成とテキストの貼り付け
        LinearLayout oLayout = new LinearLayout(getApplicationContext());
        oLayout.addView(oTextView);

        //レイアウトを表示
        setContentView(oLayout);
    }
}


■実行結果


■実行結果

みづらいけど、
前回作成したファイルの中身が見れました。。。

//リーダーでインプットストリームの内容を読む
BufferedReader reader= new BufferedReader(new InputStreamReader(oInStream,"UTF-8"));
while( (lineBuffer = reader.readLine()) != null ){
    str = str + lineBuffer;
}
ここらへんの処理はAndroidではあんまり使いませんが、
JAVAではよく使う処理です。

oInStream = getAssets().open("test.html");

これがミソです。

getAssets()で、アセットフォルダを取得しています。(イメージとして)

なので、ファイル名の指定だけで開けます。
これはAndroid特有の処理です。


AndrdoiMainifest.xml-03 (ホーム画面とアイコン, android.intent.category.LAUNCHER)

あまり使う機会がないと思いますが、
android.intent.category.LAUNCHER
を複数のActivityに記述した時の挙動を紹介したいと思います。

一応

このページの続きなので、訳わからない人は上のリンクを参照してください。


用意するものは

複数のActivity
複数のicon

■サンプルソール
・メインのアクティビティ

package co.jp.test.manifest.xml;

import android.os.Bundle;
import android.app.Activity;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  //テキストビューの生成
  TextView oTextView = new TextView(getApplicationContext());
  oTextView.setText("メイン画面");

  //LinearLayoutの生成
  LinearLayout oLayout = new LinearLayout(getApplicationContext());
  oLayout.addView(oTextView);
  setContentView(oLayout);
  }
}

・サブのアクティビティ
package co.jp.test.manifest.xml;

import android.os.Bundle;
import android.app.Activity;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SubActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  //テキストビューの生成
  TextView oTextView = new TextView(getApplicationContext());
  oTextView.setText("サブ画面");

  //LinearLayoutの生成
  LinearLayout oLayout = new LinearLayout(getApplicationContext());
        Layout.addView(oTextView);
  setContentView(oLayout);
  }
}


・AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="co.jp.test.manifest.xml"
  android:versionCode="1"
  android:versionName="1.0" >
  <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:theme="@style/AppTheme" >
    <activity
      android:name="co.jp.test.manifest.xml.MainActivity"
      android:label="activityのラベル" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <activity
      android:name="co.jp.test.manifest.xml.SubActivity"
      android:icon="@drawable/icon2"
      android:label="subactivityのラベル" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>


■実行結果



こんな画面が立ち上がると思います。
端末のホーム画面を見ると
"activityのラベル"と書かれたアイコンが表示されています。



一番左下に存在するのが、subactivityです。
AndroidManifest.xmlで最後に記述したactivityです。

タッチすると



ちゃんとサブの方が表示されました。

1つのアプリで複数のアイコンをホーム画面に表示できました。


この機能を使う機会があるのかはわかりませんが。。。



2014年2月3日月曜日

ローカルのHTMLファイルを表示(ローカルファイル,file:///android_asset)

Webページではなくローカルのhtmlファイルを表示する方法を共有します。
iPhoneは規約のせいで、編集できないローカルにもたなければいけないファイルが
ありますが、Androidには特にありません。。

なので、あまり使う機会はないと思いますが、
ローカルでファイルを管理する時に必要だと思うので、覚えておいて損はないです。

■ローカルファイルの配置

【プロジェクト名で右クリック】→【新規】→【ソース・フォルダ】→assetsという名のフォルダ作成

■ローカルファイルの配置

適当なテキストエディタを開き

<html xmlns="http://www.w3.org/1999/xhtml" xml: lang="ja">
  <body>
    <p>Hello World!!</p>
  </body>
</html>

↑をコピって貼り付ける
「test.html」として保存


「test.html」をassetsフォルダにドラッグ

■サンプルソース

package com.example.filemgr;

import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

WebView oWebView = new WebView(getApplicationContext());
oWebView.loadUrl( "file:///android_asset/test.html" );
setContentView(oWebView);
}

}

■実行結果


こんな感じで完了です。


■おまけ


package com.example.filemgr;

import java.io.IOException;

import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//assets直下のファイルを一覧で表示
String sMergeString = "";

try {
//assetsフォルダ直下に何があるかを表示
String[] sFileList = getAssets().list("");

//ファイル一覧を取得
for(String file : sFileList){
sMergeString = file + " ; " + sMergeString;
}

} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

WebView oWebView = new WebView(getApplicationContext());
//文字列をhtml形式で出力する
oWebView.loadData(  sMergeString , "text/html", null);
setContentView(oWebView);
}
}

■実行結果



このソースは何??
→assetsフォルダの直下にあるファイル一覧を表示しています。

細かいソースの説明は省略しますが、
先ほど作成した、「test.html」
以外にもいくつかのファイルが存在することを確認できると思います。

まぁ、何を言いたいかというと、今回は「assets」直下にファイルを置きましたが、
ちゃんとしたものを作る際には、「assets」のしたにもう一階層作って、
そのフォルダ内にファイルを配置しましょう!!

AndrdoiMainifest.xml-02 (タイトルとホーム画面でのアプリ名の設定)

ホーム画面上のアプリ名の変更もAndroidManifest.xmlで
行います。



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="co.jp.test.manifest.xml"
  android:versionCode="1"
  android:versionName="1.0" >
  <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="これがラベル値だ"
    android:theme="@style/AppTheme" >
    <activity
      android:name="co.jp.test.manifest.xml.MainActivity"
      android:label="activityのラベル" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>

■実行結果





こんな実行結果になりました。
起動するActivtyのタイトルがホーム画面のアプリ名と一致することが、
上の2枚の画像から、わかると思います。

また、「設定画面」→「アプリケーション」の画面で確認できるのが
applicationタグで設定したラベル名となります。

ホーム画面のアプリ名と起動するActivityのラベル名を変更したいときはどうすればいいのでしょか??

教えて偉い人!!