2010年10月4日月曜日

外部APKからリソースを取得する方法

// 外部APKのパッケージ名
String packageName = "my.droid.example.outerresources";

Context context;
try {
    // パッケージ名からコンテキストを作成
    context = this.createPackageContext(packageName, Context.CONTEXT_RESTRICTED);
    //context = this.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);

    // リソースの取得
    Resources res = context.getResources();

    // asset に下に作成したimagesディレクトリからファイルを取得
    AssetManager as = res.getAssets();
    String[] files = as.list("images");
    for(String file : files) {
        Log.d(TAG, "AssetFile="+file);
        InputStream is = as.open(file);
        Bitmap bitmap = BitmapFactory.decodeStream(is);
        ImageView imageView = new ImageView(this);
        imageView.setImageBitmap(bitmap);
        linearLayout.addView(imageView);
    }

    // res/drawable からイメージを取得
    int resId = res.getIdentifier("icon", "drawable", packageName);
    ImageView imageView = new ImageView(this);
    imageView.setImageDrawable(res.getDrawable(resId));
    linearLayout.addView(imageView);

} catch (NameNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

2010年9月19日日曜日

[AndroidFace Lite Ver.1.0.2 Beta] をリリース

 [AndroidFace Lite Ver.1.0.2 Beta] をリリースしました。
 * Faceパターンが変化しなくなるバグ修正
 * 目をもう少し大きいものに変更

システムからServiceが強制停止された後に新しくウィジェットを配置すると既存のウィジェットが更新されなっていた。
RemoteViewsの更新のときに、ウィジェットが配置されたときのWidgetIdをHashSetに保存していたが、Serviceの再起動でクリアされる。 
その為、元々あったウィジェットのWidgetIdはHashSetに存在しないため、アップデートされなくなっていた。
WidgetId毎に更新する必要はないので、 AppWidgetProviderを指定してすべてのウィジェットを更新するように変更。

[AndroidFace Lite Ver.1.0.2 Beta] was Released.

[AndroidFace Lite Ver.1.0.2 Beta] was Released.

 * Fixed a bug that does not change the face-pattern
 * Modified eyes to bigger

2010年8月31日火曜日

[AndroidFace v1.1.3 Beta] was Released.

[AndroidFace v1.1.3 Beta] をリリースしました。 Faceパターンで5つ以上のパーツを表示するようになりました。

[AndroidFace v1.1.3 Beta] was Released. Five or more display parts of the Face-Pattern.


Faceパターンのパーツの表示を5つまでしか対応をしていませんでした。
一部のFaceパターンでは6以上のパーツを使用しているものがありましたので、表示できるように対応したものです。

2010年8月11日水曜日

android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to bind to services

IntentReceiver から Serviceをbindすることは出来ない。

08-11 07:14:51.487: ERROR/AndroidRuntime(1614): Caused by: android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to bind to services

Receiver call not allowed Exception <- レシーバはコールすることが出来ない例外
IntentReceiverコンポーネントがサービスにバインドすることはできません

AppWidgetはIntennt Receiverなので

onUpdate()メソッドの中で、

Intent serviceIntent = new Intent(IService.class.getName());
context.bindService(serviceIntent, conn, Context.BIND_AUTO_CREATE);

とすると例外が発生する。


BroadcastReceiverのドキュメントは、

If this BroadcastReceiver was launched through a tag, then the object is no longer alive after returning from this function.This means you should not perform any operations that return a result to you asynchronously -- in particular, for interacting with services, you should use startService(Intent) instead of bindService(Intent, ServiceConnection, int). If you wish to interact with a service that is already running, you can use peekService(Context, Intent).

とあります。


Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
IBind bind = peekService(context, serviceIntent);

としてみても、bindはNULLになります。

はてさてどうしたものか...

2010年8月10日火曜日

AndroidFace Liteをリリースしています。

AndroidFaceの簡易版AndroidFace Liteをリリース。

AndroidFaceのブラッシュアップする為に作成したものです。
MacFace対応とか削り、基本機能のみとなってます。

Serviceまわりをリコーディングしたので、挙動は安定しているはず。。。


2010年8月7日土曜日

Android向けコードスタイル

Android向けコードスタイルを日本語訳されてる方がいたのでメモ

Code Style Guidelines for Contributors | Android Open Source <http://source.android.com/source/code-style.html>

コントリビュータのためのAndroidコードスタイルガイドライン 日本語訳 | textdrop <http://www.textdrop.net/android/code-style-ja.html>

2010年7月19日月曜日

AndroidFaceLite作成中

AndroidFaceが、ごっちゃりしてるのでちょっと整理の意味でLite版を作ってます。
えいやーなことしてるとダメよね。m(>д<・.)m

サービス、ブロードキャスト、リスナーの実装を見直しです。<(^ー^ι)

2010年7月13日火曜日

AndroidFace Ver.1.1.1 beta リリース

バグFIX と ダイエットです。


・フェイスパターンが変化しなくなるバグFIX
   *OSによりサービスが停止されてしまっていた。コード改修ミスが原因
・USBプラグ状態表示機能を削除。 実装してみたけど、、顔に被ってるよね。邪魔かなってことで。

・使用していないイメージファイルとかソース(クラス)を削除



1.1 アップデートしたら動かなくなったとコメントが!?

バッテリー50%以下になると動かなくなるとか。。。
私のXperiaでも再現。

AppWidgetでServiceをスタートしてる際に行っていた、PackageManagerへのDon't kill me! のおまじないを削除したのが原因っぽい。

≪おまじない≫
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(
    new ComponentName(context, UpdateService.class),
    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
    PackageManager.DONT_KILL_APP);

リリース後は、Androidマーケットのデベロッパーコンソールでコメントやレートをみてますが、
もっとユーザの情報がわかるようにならないかな。
ダウンロードした人の国や言語やら。。、性別とか年齢もみたいなぁ。



2010年7月8日木曜日

AndroidFace Ver.1.1 beta リリース

アップデート内容は以下のとおりです。

  • アプリアイコン変更
  • バッテリー閾値バグFIX (1:High,2:Nomal,3:Lowが反転していた。)
  • バッテリー値白文字化
  • USBプラグ状態表示
  • 電波強度とフェイスパターンへ対応設定の調整
  • 設定メニューフェイスパターン一覧
  • 設定メニュー日本語化
  • 設定メニューバッテリー閾値変更後、フェイスパターンの更新処理追加


バッテリー値表示を雑に黒字でテキスト表示してたのを修正です。リクエストもあったので。
元々、フェイスがメインだったのでおまけ程度に表示してたのだけど、バッテリーメーターとして使用している人が多かったので、ちゃんと見れるように表示するようにしました。
電池使用状況確認画面の表示ってどうやるのだろ~。


アプリアイコンもSDKに入ってたやつを使用してましたが、ちゃんとしたものを作成しました。

2010年6月30日水曜日

AndroidFaceが、情報サイトで紹介れました。

Android情報サイト「アンドロイダー」様より紹介の案内のメールを頂きました。
ダウンロード数増えたのかな?3桁超えてました。
統計の見方も分からないので増加推移がよくわからない。そもそも統計って取れたりするのかな。。?

平均レートは星4つと多大な評価頂き驚きです。
アンドロイダーの週刊アクセスランキングにもランクインしていた!?

「カワイイ」とよくコメントを頂いてます。
 もともとは、MacFaceをAndroidで表示してみようと勉強がてら作成したものですが、わたしがPaint.NETでちょいちょいっと作成したドロイド君が思いのほか評価して頂けてるようで^^;

拙作を紹介して頂いた方、利用して頂いている方に感謝致します。
ありがとうございます。
コメントやメール頂いた要望的な内容については検討させて頂きます。

今後ともヨロシクです。

2010年6月14日月曜日

SdkVersion指定について。

突然、台湾から英語のメールが来た。

Motorola MILESTONE ユーザらしいのだが、AndroidFace を Androidpit の QR-code からダウンロードしようとしたけど、Marketに表示されないらしい。

Motorola MILESTONEは、SDKのバージョンは2.0 or Later。

アップロードしたバージョンの、 AndroidManifest.xml の SdkVersion指定を確認してみると、

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4"/>
となっている。
  • android:minSdkVersion - アプリケーションが実行するために必要な最小の API レベル
  • android:maxSdkVersion - アプリケーションが実行するために必要な最大の API レベル
  • android:targetSdkVersion - アプリケーションがターゲットとする API レベル
どうやら、
ターゲットとするAPIレベルの指定がまずかったようだ。

targetSdkVersion=4 をしていると、例えば 2.1 のHTC DesireではAndroid Marketに表示されないらしい。

Xperiaは1.6(4)なので問題なかったようだ。

プラットフォームバージョン API レベル 端末一例
Android 2.2 8 Nexus One
Android 2.1 7 HTC Desire
Android 2.0.1 6 ?
Android 2.0 5 Motorola MILESTONE
Android 1.6 4 SonyEricsson Xperia
Android 1.5 3 ?
Android 1.1 2 ?
Android 1.0 1?

ついでに、<supports-screens>の定義も一応追加しておいた。
<supports-screens
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:anyDensity="true"
/>


「解像度のスクリーンをサポートするようにしたため、自分のアプリがサポートするスクリーンをAndroidManifest内で指定する必要が出てきた。」らしい。
念のため定義しておく。

2010年5月13日木曜日

A3 2010 Spring エントリーしてみた

日経BP社ITproさまが主催されている Android Application Award(A3)2010 Spring にエントリーしました。


おいおい無謀だな・・・っ。
参加することに意義があるんだっ!!


まぁ、そんな感じなノリで。。

AndroidFace をちまちまろ開発/公開中

AndroidFace をちまちまろ開発/公開してます。

まだヘコヘコなのでこそこそアップしています。



v1
 初公開
v1.0.1 beta+
 デフォルトフェイスパターンを新しいデザインに変更
v1.0.2 beta+
  バッテリーキャパシティ閾値のユーザ設定追加
  デフォルトフェイスパターンの新しいデザインの設定ミス修正
  SDカードブラウザのフォントサイズ修正


実機はXperiaでしか検証していないません。
パフォーマンス最適化してませんので、HTC端末で動かすと重いかもしれません。


まだまだ不備な点がありますが、暖かく見守ってやってくださいw