2010年10月31日日曜日

AndroidでEメール

Androidでは、普通のJavaMail APIは使えません。
で、Google が Android用のJavaMailを出しています。

こちら。
http://code.google.com/p/javamail-android/

サンプルコードもあります。
http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_(no_Intents)_in_Android

ただ、IMAPでの取得サンプルが、ない。
今度、ここにサンプル載せますね。

今日は、ねむねむで、無理です。

2010年10月26日火曜日

AndroidのView.onDrawで、改行する。

Androidで、カスタムViewを作りたいとき、
Viewクラスのサブクラスを作って、onDrawメソッドをオーバーライドして、
Javaコード上でViewのデザインをしたいときがあります。

で、そんなときに、「文字」を入れたいときがあるのだけれど、
枠内に文字を納めるために、改行を入れないといけない。

だがしかし、AndroidのAPIにはそれらしいモノは、ない。

なので、自分で書いてやらないと行けない。

皆さんも結構書くコードだと思うので、サンプルコードを載せておきますね。

↓な感じです。サンプルのため、パラメータ等もonDrawメソッドに詰め込んであるけれど、適切に、切り貼りしてください。

public class LineBreakInspectView extends View{
public LineBreakInspectView(Context context) {
  super(context);
 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  int textSize = 12;
  Paint paint = new Paint();
  paint.setTextSize(textSize);
  paint.setColor(Color.WHITE);
  String message = "僕は、今日も一日、生きてしまいました。答えも出ないまま。しょうがない、で済ましてよいようなことではない。用な気がするが、そんなこと、気にしてられない。";
  int maxWidth = canvas.getWidth();//150pxで改行する。
  int lineBreakPoint = Integer.MAX_VALUE;//仮に、最大値を入れておく
  int currentIndex = 0;//現在、原文の何文字目まで改行が入るか確認したかを保持する
  int linePointY = textSize;//文字を描画するY位置。改行の旅にインクリメントする。

  while
(lineBreakPoint!=0){
   String mesureString=message.substring(currentIndex);
   lineBreakPoint=paint.breakText(mesureString, true, maxWidth, null);
   if(lineBreakPoint!=0){
    String line = message.substring(currentIndex, currentIndex + lineBreakPoint);
    canvas.drawText(line, 0, linePointY, paint);
    linePointY += textSize;
    currentIndex += lineBreakPoint;
   }
  }
 }
}

...。

できるのなら、TextViewを使って組んだ方が良さそうですね。


2010年10月24日日曜日

AndroidでAdmobを表示する方法

Androidアプリを作って、マニュアル通りにくみ上げたのだけれど。。。広告が表示されません。

なんと、マニュアルの手順がたりないのです。(たぶん。)
マニュアル通りにやると、
10-24 12:11:02.362: ERROR/AdMobSDK(285): could not find com.admob.android.ads.AdMobActivity, please make sure it is registered in AndroidManifest.xml
とか、表示されちゃいます。

ので、ここで改めて、まとめ直しますよ。

手順1. admob-sdk-android.jarにクラスパスを通します。
Admobに登録すると、admob-sdk-android.zipが得られます。
それを解凍すると、admob-sdk-android.jarが得られるので、
それを自分のAndroid Project内にコピー&ペーストします。
コピー&ペーストしたadmob-sdk-android.jarを右クリック→Build Path→Add to Build Pathで、クラスパスに通すことができます。

手順2. AndroidManifest.xmlの編集(マニュアルは、ここの手順が足りません。)
AndroidManifest.xmlに、3つ、追加します。
<application>タグの直下に、
<meta-data android:value="XXXXXXX" android:name="ADMOB_PUBLISHER_ID" />

を挿入します。(きっと、</application>の直前がいいです。)
XXXXXXXは、Admobのサイトで得られる、パブリッシャーID
です。
あと、タグの直下に、
<uses-permission android:name="android.permission.INTERNET" />

を挿入します。(きっと、</manifest>の直前がいいです。)これは広告の取得のためですね。
AndroidManifest.xmlの編集の最後に、Activityを追加します。ここが抜けてる。
タグの直下に
<activity android:name="com.admob.android.ads.AdMobActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation|keyboard|keyboardHidden" />

を挿入します。これにより、広告が取得できるようになる(んだと思います。)
きっと、先ほど挿入したmeta-dataタグの直前がいいです。


手順3. attrs.xmlの編集(新規作成?)
attrs.xmlを、作ったアプリケーションのパス res/values の下に、以下の内容で新規作成します。

<xml version="1.0" encoding="utf-8"?>
<resources>

<declare-styleable name="com.admob.android.ads.AdView">

<attr name="backgroundColor" format="color" />
<attr name="primaryTextColor" format="color" />
<attr name="secondaryTextColor" format="color" />
<attr name="keywords" format="string" />
<attr name="refreshInterval" format="integer" />
<declare-styleable>

<resources>


もし、attrs.xmlが既にあった場合は、<declare-styleable>タグの内容を追記してください。

手順4. 画面に入れる。(Layout XMLへの追加)
画面のxmlで、広告を入れたい場所に以下のViewを追記します。

<com.admob.android.ads.AdView android:id="@+id/ad" android:layout_height="wrap_content" myapp:backgroundColor="#000000" myapp:primaryTextColor="#FFFFFF" myapp:secondaryTextColor="#CCCCCC" android:layout_width="fill_parent"/>



これで、Admobが表示できます!!!

よい、プログラミング生活をお送りください。