Warning: include(/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php): failed to open stream: No such file or directory in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74

Warning: include(/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php): failed to open stream: No such file or directory in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74

Warning: include(): Failed opening '/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php' for inclusion (include_path='.:/usr/local/php/5.4/lib/php') in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74
【Android】現住所を表示するWidget(ウィジェット)作りました。|Widget(ウィジェット)開発時の画面対応やバージョン対応などの小技まとめ – Androidアプリつくったった

【Android】現住所を表示するWidget(ウィジェット)作りました。|Widget(ウィジェット)開発時の画面対応やバージョン対応などの小技まとめ

住所どこっぽ、かっぱっぽウィジェット

現住所を表示するWidget(ウィジェット)作りました。

今の現在地の住所をアプリで開かなくても、
常にリアルタイムで教えてくれるウィジェットです。
 
住所どこっぽ、かっぱっぽウィジェット
GooglePlayにて無料でダウンロードできます。

 
迷って人に伝えるときは住所そのものを伝えなければならないので
アプリを開かずともリアルタイムで教えてくれて大変便利です。
 

測定誤差について

気になる測定誤差は実際に近所を散歩して測定してみました。
SAがなしでもそこそこはズレますが大分ましになったように思えます。
 
GPS+Wifi 15〜35m前後
GPSのみ 50〜100m前後
 
GPSのみだとまだまだ誤差が大きいです。アプリ自体のメモリ使用もかなり押さえているので
Android4.0以降ならかなり電池持ちもいいのではないでしょうか?
 
▼ 今回の制作に絡んでWidget(ウィジェット)開発時の画面対応やバージョン対応などの小技を紹介していきたいとおもいます。
 

Widget(ウィジェット)がVersion違いで巨大化するのを防ぐ方法

原因はAndroid4.0とそれ以前ではサイズの計算式が異なるためです。
以前のサイズで作成するとはみ出して1 × 1が2 × 2のサイズになったりと
面倒な事になります。
Widgetサイズの巨大化

対処方法

Versionによるリソースの振り分けを考える方もいらっしゃるかも知れませんが、
公式のガイドラインに書いてあるようにターゲットの数値を13以下に
下げるだけで対応が可能です。
>>ウィジェット作成の公式ガイドライン – App Widget Design Guidelines
http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#anatomy
  
要するに下記のようにtargetSdkVersionを”13″にして,計算は4.0以前の
従来の計算方法でよいという事です。

android:targetSdkVersion="13"

 
参考として、ウィジェットの解像度の対応を書いておくと

ldpi (120 DPI) = 72 * (120 / 160) == 54 x 54 pixels
mdpi (160 DPI) = 72 * (160 / 160) == 72 x 72 pixels
hdpi (240 DPI) = 72 * (240 / 160) == 108 x 108 pixels
xhdpi (320 DPI) = 72 * (320 / 160) == 144 x 144 pixels

XMLリソースも従来どおり(例は2×1のウィジェット作成)

<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="146dip"
    android:minHeight="72dip"
    android:initialLayout="@layout/widget_message"
    android:updatePeriodMillis="86400000"
    />

と書いて後は、ブロードキャストレシーバとサービスをManifest.xmlに
記載するいつもの流れでバージョン対応が可能です。
 
▼ただし、最新版のSDKtools安直に最初からターゲットを13以下で作成すると
下記のように警告が出てくる事があります。
※修正して反映が悪いときは、迷わずプロジェクトをクリーンしてみましょう
 

Not targeting the latest versions of Androidの解消法

 
targetのveersionを変えると下記のように警告が出る事があります。
今回の場合、わざと計算方法を旧式にしてサイズの計算方法をそろえているので
問題はありませんが、やはり警告は気持ちが悪いものです。
 

Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating
this version. Consult the android.os.Build.VERSION_CODES javadoc for details.

 

対処法

要するに『最新じゃない』と文句を言われていますので、
ターゲットバージョンのAPIレベルを最新の値にする事で解消します。
【手順】プロジェクトを右クリックしてプロパティを選択、
出てきた画面のAndroidの項目から使用する最新バージョンを選択しましょう。
※今回のように位置情報を扱う場合はGooglePlayAPIの系統から選択します
 

GPS測定をウィジェットに組み込むにあたっての工夫

Android gps widjet
◎ GPSを入れると配布できるユーザに制限がかかります。
位置情報へのアクセスが含まれる場合GooglePlay上で
『全ユーザー対象とはできません』
 
▼ ガイドラインにこんな感じで書いてあります。
 
位置情報
コンテンツの説明 全ユーザー対象 ユーザー成熟度 – 低 ユーザー成熟度 – 中 ユーザー成熟度 – 高
ユーザーの現在地情報にアクセスするアプリ ✘ ✔ ✔ ✔
ユーザーの現在地を公開または共有するアプリ ✘ ✘ ✔ ✔
 
◎ GPS取得までの間やGPSがOFFだったときの表示
通常のGPSを利用するアプリであれば、開いたときに
GPSがOFFだと訴えて、設定画面を開くのが普通だとは思いますが
ウィジェットは常駐アプリなのでいちいちOFFにする度設定画面が出てこられても
鬱陶しいだけです。という事で、かっぱのキャラクターの台詞にして
うまくごまかす事にしました。
 
GPSが設定されていない → GPSがOFFだとわからないっぽ
GPSが測定中、通信不良 → スマホさんからまだGPS取れてないっぽ
 
実装は下記のソースのように書いています。
※掲載用に少し関数名などは変えてあります。

    if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
        place="GPSがOFFだとわからないっぽ";
    }else if((getLat()!=0)&&(getLon()!=0)){
        p = new GeoPoint((int) (getLat() * 1E6), (int) (getLon() * 1E6));
                	place=chengeAddress(p)+"\n付近っぽ";
    }else{
        place="スマホさんからまだGPS取れてないっぽ";
    }

 
実装するにあったって基本事項ですが
位置情報を利用するのでサービスのクラスにimplements LocationListenerと
マニュフェストへのパーミッションを忘れずに書いておきましょう。
 
▼ 地味なエラー対応が合ったのでおまけで書いておきます。
 

MissingTranslationtって無視できる?

ハイ、可能です。
日本でしか出さないからvaluesにだけ記載していればいいだろうと考えて
リリース作業を行おうとするとこんなエラーがでます。

“app_name” is not translated in af, am, ar, bg, ca, cs, da, de, el, en-rGB, en-rIN, es, es-rUS, et-rEE, fa, fi, fr, fr-rCA, hi, hr, hu, hy-rAM, in, it, iw, ja, ka-rGE, km-rKH, ko, lo-rLA, lt, lv, mn-rMN, ms-rMY, nb, nl, pl, pt, pt-rPT, ro, ru, sk, sl, sr, sv, sw, th, tl, tr, uk, vi, zh-rCN, zh-rHK, zh-rTW, zu

Issue: Checks for incomplete translations where not all strings are translated
Id: MissingTranslation

まぁかっぱっぽなんて翻訳できなくて当然なので
このエラーを深刻にとらえないようにeclipse側の設定を変更します。
まず、プロジェクトのプロパティのAndroid Lint Preferenceを開きます
次に、Correctness:Messagesの項目にあるMissingTranslationを選択し
severityをfatalをプルダウンでinformationに変更します。
※warming以下なら何でもOK、ただ何かしら情報は持っておきたいのでwarmingまたはinformationを推奨します。
MissingTranslationを無視する設定
 
以上です。
 
ご参考になれば幸いです。

About the Author

dhmo
Author:DHMO(ディベロッパー名) 仕事では自社サービス・メディアの開発を行ってます。 趣味でAndroidアプリ製作を行っています。 カラオケではランキングバトルにはまっております。 Mail: dihydromooxide7@gmail.com 

Be the first to comment on "【Android】現住所を表示するWidget(ウィジェット)作りました。|Widget(ウィジェット)開発時の画面対応やバージョン対応などの小技まとめ"

Leave a comment

Your email address will not be published.


*