2012年4月18日水曜日

githubにfreetypeその他のandroid.mkを公開して

から、sourceに入ってるのを気がついたが、今更消すのも寂しいし、まあいいや。 あ、freetypeしか使ってないので、他のは足りないかも。 一応文字は表示されたけど、他のを作ったら、ちゃんと動くサンプル書こう。 http://github.com/likedual

IntentでGalleryアプリから画像を受け取る

1. <intent-filter>内に受け取りたいintent.actionとdataタイプを追加
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/*" />
Galleryアプリからはaction.SENDで送られる。action.VIEWはファイラーアプリ等からの開く動作用

受け取り方

GalleryアプリからはACTION_SENDで送られる。
ずいぶん手間取ったけど、結局これで受け取れた。
Intent intnt = getIntent();
String intntAction = intnt.getAction();
Bundle intntExtras = intnt.getExtras();
if( Intent.ACTION_SEND.equals(intntAction) ) {
    Uri uri = (Uri)intntExtras.getParcelable( Intent.EXTRA_STREAM );
    if( uri != null ) {
        InputStream input = getContentResolver().openInputStream(uri);
        Bitmap bmp = BitmapFactory.decodeStream(input);
        input.close();
    }
}
強調している行はMedia.getBitmapと同じなので、そのまま置き換えられる。
    Bitmap bmp = Media.getBitmap( getContentResolver(), uri );
疑問点
送られてくるIntentを、Logに投げると中身が表示されたが、
extras(Bundle)を一覧表示する方法は知らない。
Intent { act=android.intent.action.SEND typ=image/* 
cmp=com.likedual.Property/.PropertyActivity (has extras) }
Uriが返ってきそうな、getIntent().getData()は入ってない。

時間になってしまった。おかしいけど見てる人もいないし、取り敢えず公開しておこう。
ファイラーアプリからは別途受け取る必要があるが、次回の宿題になってしまった。
長期のブランクで、構造化プログラミング未満になってるし、前途多難だな。

2012年3月27日火曜日

Android用にfreetype2をmakeしてみる(だけ)

Beuc's Blogさんの通りにやっただけ。
今日だけ環境がUbuntu64bit+SDK17+NDK7bmです。
c関係のライブラリは、linuxの方が弄りやすいですねえ。
NDK7bmを使ってますが、参考にした通りの手順なので、
作ったlibsはarmだけです。 あらかじめfreetypeは2.4.9を
workspaceに展開しておきました。 ディレクトリは適当に。

1.クロスコンパイラの準備をします。
~/android/android-ndk-r7bm/build/tools/make-standalone-toolchain.sh \
  --platform=android-9 --install-dir=$ANDROID_NDK_ROOT/ndk-standalone-9

2.pathを追加
PATH=$ANDROID_NDK_ROOT/ndk-standalone-9/bin:$PATH

3.~/workspace/freetype-2.4.9内でconfigure
CFLAGS="-std=gnu99" ./configure --host=arm-linux-androideabi \
--prefix=/freetype --without-zlib

4.make
make clean
make

5.install
make install DESTDIR=$(pwd)

私の環境では~/workspace/freetype-2.4.9/freetype/libに
出来上がりましたが、まだ動かしていません。

2012年3月5日月曜日

Cygwinのrepoとかでcan not fork()とか出た時に

アドレスがダメだみたいなエラーが出たら、rebaseallしよう。
ネタ元はこちら「Cygwinで "unable to remap *.dll" が出るときは rebaseall らしい
ホント助かりました。
ちなみにandroid.jarのソースを取得してた時の話です。
これAndroidアプリ作ってる人は全員やってるんだろうな。
Googleは速やかに、各バージョン毎のsource.jarをミラーサーバで配布すべきでしょ。
あまりにも開発資源のムダすぎる。それともみんなlinuxなのかなあ。
c:\cygwin\usr\bin>ash rebaseall -v
/frameworks/base/core/java/android
/frameworks/base/core/java/com
の2つのディレクトリを
C:\android-sdk\platforms\[androidのversion]
以下にコピーして、無事ソースが表示されるようになりました。

2012年2月10日金曜日

Activityがスクリーンサイズより小さく表示される

ちょっとわかりづらい?。こんな感じに表示された。アプリの表示が画面サイズと合わない。それっぽい設定って無いんだよね。そういうアプリも見たことなかったし。
カッコワルイ
しばらくググっても分からなかったけど、早起きしてゴミ捨てしたおかげで、みつかった。
Galaxyシリーズは持ってないけど、エミュレータでもHTCの実機でも、同様の表示になる。ネットが無いころだったら、わからなくて諦めたなこれは。
AndroidManifest.xml<manifest>内に、以下のSdkVersionを追加したら、正しく表示された。
<uses-sdk android:minSdkVersion="4" />
カッコイイ
余談だけど、先人の作ったコードを参考にしてたら再現してしまい、SdkVersionは関係ないのかと再び悩んだら、微妙にタグが違ったりして力が抜けた。みんな苦労してるんだなあ。

2012年2月4日土曜日

findViewByIdはsetContentViewの後で

前回のHelloActivityのソースに、テキストを表示したくて追加したら、実行時エラーが出た。

02-04 01:03:38.007: E/AndroidRuntime(4179): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.helloactivity/com.example.android.helloactivity.HelloActivity}: java.lang.NullPointerException
LogCatにエラーはぬるぽしか理解できない。
DDMSの使い方も勉強しなければ。
public class HelloActivity extends Activity {
    public HelloActivity() {
    }
    /**
     * Called with the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tview = (TextView)this.findViewById(R.id.text);
        tview.setText( System.getProperty("file.encoding") );

        // Set the layout for this activity.  You can find it
        // in res/layout/hello_activity.xml
        setContentView(R.layout.hello_activity);
    }
}
"import android.widget.TextView;"も追加してある。
setContentView実行後でないと、Activityが実体化されずnullが返る。
Activityの仕様みたいでDialog等でも起きる。
参考資料(Kazzzの日記さん:AlertDialog#findViewByIdはshow以降じゃないと使えない)

今回判ったこと。
  1. 何をするにも先にsetContentViewする。
  2. findViewByIdでViewを取得できる。
  3. Viewは代入時にキャストする。

このエントリーはもちろんSyntaxHighlighterを試したくて書いた。

参考
ななし's Programming: SyntaxHighlighterのグーグルBloggerでの使い方
次回以降の宿題
よしけんActivity: Syntax Highlighter 3.0でLogcatのハイライト表示を自作する手順

2012年2月3日金曜日

HelloActivity

やっぱり最初はHelloWorldだよね。
新規Androidプロジェクト 

ビルド・ターゲットにAndroid1.6を選択 

既存サンプルからプロジェクトを作成

HelloActivityを選択

動いた! 
おつかれさまでした。

2012年2月1日水曜日

このブログはAndroidとJavaの私的メモです

ネットの文章を拾い読みしても、全くJavaもAndroidも理解しないので、まじめに初歩から、動かした事を書くメモ的ブログです。

コピペを多用するので、ソースには気をつけますが、もし不適切な引用などございましたら、ご連絡ください。携帯端末で投稿、確認する可能性を考え、改行は極力除いております。

以下の環境で遊んでます。
AMD Phenom X6+Memory12GB, System SSD128GB, WindowsPro 64bit
Java7-2 64bit, eclipse 3.7 64bit, Java EE, C/C++, Cygwin, SDKr16, NDKr7, Google web toolkit

エラー処理等は考慮しておりません。まだ分かんないし。