Translate

BTemplates.com

Powered by Blogger.

ラベル Androidアプリ の投稿を表示しています。 すべての投稿を表示
ラベル Androidアプリ の投稿を表示しています。 すべての投稿を表示

2017年12月27日水曜日

2017-12-14、15、19~21、27 到達点メモ


タイマーが終了した時に画面を点灯するように修正した

                val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
                wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                        or PowerManager.ACQUIRE_CAUSES_WAKEUP, "disableLock")
                wakeLock.acquire()
                wakeLock.release()

PowerManager.SCREEN_BRIGHT_WAKE_LOCKは非推奨ではあるが
使用できない訳ではない。
というか、これそのものを実装する機能が見つからなかったので
これを使うしかない。
設定的には、wakeLock を取得した時に点灯するという設定の為
設定は全部近くでやる必要がある。
また、wakeLock.release()してもすぐに点灯が消えるわけではなく
単に灯りをつけるだけなら、この方がバクとかが発生しないのでこの方がよい。


ライフサイクル形式だと他のアクティビティがある場合はうまくいかない。
        ClassNoticeManager.instance.unregisterActivityLifecycleCallbacks(MyLifecycleListener())
ClassNoticeManager.instance.registerActivityLifecycleCallbacks(MyLifecycleListener())
的なやり方も試してみたが、再登録される様子はなかった。

あと、どうもデストロイされた後はずっとデストロイ扱いのようである。
すくなくともresumeとかは呼ばれなかったのは確認した。

参考サイト:Application registerActivityLifecycleCallbacks - top ranked examples from Open Source projects
参考サイト:アクティビティのライフサイクル


最終的にふと思ったのが、ようはアプリケーションが終了するときに処理をやれればいいので、onTerminateを使えばできるのではないだろうか?と思っていたが
実機では使うことができないらしい。
Android でアプリケーション開始時と終了時にごにょごにょする
アプリケーション開始時・終了時の処理を定義する
Application#onTerminateは、実機では呼ばれない。

副産物
メニューアイテムを隠す方法
 override fun onCreateOptionsMenu(menu: Menu): Boolean
でtestmenu = menuのような形で値を保持するようにし

必要な場所で
testmenu.findItem(R.id.(ボタン名)).setVisible(false)
と書けばよい

参考サイト:メニューアイテムを隠す

代案
存在しているActivityの名前を取る方法が見つかったので
そこから取得。getRunningTasksを使うのだが
これは例によって非推奨である。しかし、代案が見つからないため
一先ずこれを採用


私の場合は以下のように書いた
val manager:ActivityManager = getSystemService(Service.ACTIVITY_SERVICE) as ActivityManager
var activityFlag:Boolean = false
for (task:ActivityManager.RunningTaskInfo in manager.getRunningTasks(Int.MAX_VALUE)){
                    if(MainActivity.name.equals(task.baseActivity.className)){
                        activityFlag = true
                        break
                    }
}

代案が見つかりました。appTaskを使う。

for (tasks:ActivityManager.AppTask in manager.appTasks){ if(MainActivity.name.equals(tasks.taskInfo.baseIntent.component.className)){
                        activityFlag = true
                        break
                    }
}

なお、getRunningTasksを使った場合
他のアクティビティが前面に出ているときに
メインのアクティビティを呼び出すという処理を行った場合
サービスが止まるという事が起きた。(厳密にはサービスでタイマー処理を行っているが
それの動作が止まった)
なお、appTasksの場合は、その現象は起きなかった


参考サイト:Android L getTasksの挙動変更
参考サイト:Androidで表示しているActivity名を取得(非推奨のやり方)
参考サイト:Androidでアプリやサービスが起動しているかどうか確認する方法(非推奨のやり方)

どうも検証した結果、電源ボタンを押してスリープをすると
ほおっておくと強制的にDozeモードに入るらしい?


参考サイト:Android 画面を切るとTimerの間隔が遅くなる問題


ひとまず、電源を抜いた状態でどういう動作をするかを見ないと何とも言えなさそう。
駄目でした。

で、ふと思いついたのですが、特定の秒数ごとにWaleLockで強制的に
点灯させればよいのではと気が付いたので以下のように実装

if(now_sec % 3 == 0) {
    val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
    var wakeLock: PowerManager.WakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK
            or PowerManager.ACQUIRE_CAUSES_WAKEUP
            or PowerManager.ON_AFTER_RELEASE, "disableLock")
    wakeLock.acquire()
    wakeLock.release()
}

PowerManager.ON_AFTER_RELEASEは、このフラグを含むWakeLockがリリースされた時にthe user activity timerがリセットされるらしい。
調べてもいまいち意味が分かっていない為、推測になるがアクティビティごとにタイマーを取得しており、それが一定の値になるごとにライトの明るさを下げているのだと思われる。また、明るさを下げるたびにthe user activity timerがリセットされているのかもしれない。何故かというと、今、30分経つと自動的にスリープになるように設定しているが、now_sec % 10 == 0にすると、明るくなったり暗くなったりするからである。

なお今の設定だと電源ボタンでスリープを入れても、一度は明るく点灯するがほっておくと暗いままの点灯になる。

多分完全に消灯しても動くのが一番良いのだろうが、正直現状では実装できる範囲内でのこれ以上良い実装方法が思いつかないので一度これでリリースしました。


関係ない話になるが、GooglePlayで他の言語での順位などを調べたい場合は
アドレスの最後に、hl=(対応言語)つけると見ることができるのを初めて知った。
PC上で他の言語だとどのように表示されるか確認する際に便利。
また、言語によってアプリの表示順番も違うので、それを調べる際に参考になるかもしれない。
例:https://play.google.com/store/apps?hl=zh_HK

最近、Deploygateという存在を知り、ちょっと使い始めている状況である。
現状では、リモートテストぐらいしか使わなそうだが、わざわざPCにUSBをつながなくても使えるのは便利。

また、Deploygateはリモートログが取れるのだが、その際に
Releaseビルドだとリモートログは特殊な設定をしないと取れないので
リモートログを取りたい場合は、深い理由が無ければDebugビルドをすること。

ただ、使ってみた感想としては、なんだかんだ言ってAndroidStudioの方が見やすい。
ただし、自分のPCのせいかもしれないが、使っていて偶に接続が切れるので
そういう意味合いでは、リモートログの方が便利に感じる。

参考サイト:DeployGate SDKの設定方法
参考サイト:DeployGate SDK does not work or Cannot get DeployGate log or remote logcat

今日はここまで。

2017年10月30日月曜日

ApplivでVoiceTimerのアプリレビューが掲載されました。



ApplivへVoiceTimerのアプリレビューの依頼をしまして、無事掲載されましたので
レビュー内容を紹介します。
よかったら、ぜひ読んでみて下さい。

https://android.app-liv.jp/004620518/

今回レビューを依頼するのは初めてですが
依頼した時に返事がすぐに帰ってきたので
返事を貰った時は結構うれしかったです。

また、レビューの内容も聞き忘れないように音量は最大化にしておこう
ぐらいにしか思っていなかったので
それが原因で家以外では使いにくいという部分は
自分の視点では抜け落ちていた部分がでした。
そういう部分でも大変参考になりました。

Appliv様、レビューの掲載ありがとうございました。
また機会があればよろしくお願いします。


2017年10月22日日曜日

AQUOS eaでアプリのタイトルの文字数の表示制限を調べてみた


とあるudemyの講座でアプリ一覧なら全角七文字は表示されるという話が
あったのですが(実際に表示されているのは動画で確認している)、
自分のスマホだと省略されたのでまず自分のスマホでは
どうなるのかと思い検証してみました。

検証端末:AQUOS ea(バージョン:Android7.0)

調査した画面は、アプリ一覧、Home画面、フォルダの三つです。
全角と半角でそれぞれ調べました。

◆全角
文字数とタイトル名フォルダHome画面アプリ一覧
全角五文字:あいうえお
全角五文字+半角一文字:あいうえおa×(あいうえ..)
全角六文字:あいうえおか×(あいうえ..)×(あいうえお..)
全角六文字+半角一文字:あいうえおかa×(あいうえ..)×(あいうえお..)×(あいうえお..)
全角七文字:あいうえおかき×(あいうえ..)×(あいうえお..)×(あいうえお..)

◆半角
文字数とタイトル名フォルダHome画面アプリ一覧
半角10文字:AbcdeFghij
半角11文字:AbcdeFghijK×(AbcdeFghi..)
半角12文字:AbcdeFghijKl×(AbcdeFghi..)
半角13文字:AbcdeFghijKlm×(AbcdeFghi..)×(AbcdeFghij..)×(AbcdeFghij..)

結論としては、AQUOS ea(バージョン:Android7.0)に限って言えば
全角は5文字。半角は10文字でアプリのタイトル名を抑えると省略されないので
一目でわかりやすくなるのではないでしょうか?

2017年10月14日土曜日

2017-10-14 到達点メモ


今日はローカライズの修正とローカライズした画像を制作している。
今更ながらの話であるが、
Nexus 7 の7の意味って7インチって意味であることに今更ながらに気が付いた。

9インチサイズでデザインが崩れていたので
(そもそも最初は9インチでテストしていたこと自体に気が付いていなかった。)
調べたところ、どうも9インチと10インチはsw720だと区別をすることができなかった。
今回はやらないが、参考サイトのdp解像度を見た感じだとsw800なら
区別をつけることができるかもしれない。
正直な所、そこまでちょっと労力は割きたくない。

ローカライズをする際に、GooglePlayで操作画面のキャプチャー用の画像を
制作したい場合はエミュレーターで作ったほうが便利だ。
実機だと、保存→別アプリを立ち上げて写真の選択→送る→ダウンロードという手順を踏まないといけないため、大変手間がかかる。
一方で、エミュレーターならカメラボタンを押せば、設定した場所にファイルが保存されるのですぐに取り掛かることができる。

また、ローカライズの切り替えは、Android7.0以上が便利。
一度選択した言語はAndroidの方で覚えてくれるため、
切り替える度にわざわざ探す必要がない。

大体できた気がするが、今日は気力が尽きたのでここまで。


2017年9月27日水曜日

2017-09-26 到達点メモ


昨日設定したローカライズの動作確認をしていた。
見た感じ問題はなさそうだが、ローカライズのテストが面倒だった
現状、ローカライズはエミュレーターでテストをしているのですが
英語しか入力ができない且つパッと見て国名がわかりにくい
*後で調べたら普通に日本語にできる方法があった。

具体的にはGoogle翻訳だとドイツ語はGermanになるけど
Deutschlandで検索しないと出てこない。
後、表示されるのが、ドイツ語ならドイツ語で表示されるので
ロシアとかがРоссияという風な感じで表示されるので本当に地味にわかりにくい。

日本語に翻訳するようなアプリを考えたけど
ローケルアプリ系は今のバージョンだと
Androidの設定をいじらないといけないから
現実的ではないです。

で、ちょっと分、秒のレイアウトの配置のずれが木のせいで見過ごすには
ちょっと無視できないレベルになってきたので
せめて中央に配置するぐらいにはしようと思って今なおしている処なのですが
何故か中央に配置することができない。


理想現実



解像度がhdpiの時に発生するのが確認できているので
android:gravity="center_vertical|center_horizontal"を設定していても
大きさに余裕がないと正しく配置ができないのかも??

調査した結果、対策としては文字のサイズを小さくすることで
以下の画像のように中央に表示できることが確認できました。



拡張ライブラリで大きさ24%という風に設定しているのですが
どうも、用意した大きさに対してフォントのサイズが大きすぎたようで
その為、中央に配置することができなかったみたいです。

というかmdpiでは90spで指定していたのに
何故かhdpiでは100spで指定していた……。
そりゃあ、おかしくなるのは当たり前ですよね……。

ひとまず、私の設定では80sp辺りがちょうどいい感じでした。
ある種の最大の問題が片付いたので
今日はここまで。



2017年9月26日火曜日

2017-09-25 到達点メモ


Youtube動画を作る際は、テキストで説明するならば
字幕で作ったほうが多分楽。
あと、一回字幕を作ると、翻訳はそこまで手間ではない
ただし、翻訳は下に表示されるので
一部の動作が見えなくなる時がある。
それを考えると、動画編集でカバーできる部分はあるとは思うが
下に表示するUIはあまり良くないのかもしれない。


主要言語一覧
国名コードを調べたい時に便利なサイト
言語から国名コードを調べたい時に便利なサイト

◆ローカライズ化のする際に楽な手順

0.改行マークのコード(\n)を入れていると、翻訳がおかしくなる時があるので
削除しておく。

1.変換したい場所をcsvにして、三つ区切りにする
例:
<string name="test">,,</string>

2.Excelで開いて、翻訳した内容を
真ん中にコピーする

3.Excelの中身を全部コピーして、
テキストエディターに貼り付ける

4.置換でタブを削除して、それをコピーして
XMLに貼り付ける

5.消した改行コードを入れる

◆その他
・ヒンディー語は、未知の言語過ぎたので
今回は見送り。テキストエディターだと表示されない部分がある。
ただし、AndroidStudioでは全文表示された。
あと、一文字の表現をどうやればいいのかちょっと分からなかったのも
見送った理由の一つ。

・ズレると死ぬので追加する場合は、多分上から順に加えたほうがいいと思われる。

・中国にGooglePlayは存在しない
「Google Play」、中国で年内に復活か--レノボ幹部が発言との報道
*2016年の話。2017年9月25日時点では復活していません
米グーグル,中国市場からの“撤退”を表明


ひとまず、母語話者1億人以上のものはカバー出来るやつは全部カバーした。
動作確認を終えたら、一先ず上げるか???
英語欄だけに対応言語を書いて、それで終わりも手かも。

2017年9月5日火曜日

2017-09-04 到達点メモ


何の設定が悪いのがいまいちわからないのだが
アイコンの画像が正しく表示されない
此処に書くと、長すぎるで別記事を立てました。

ブログの書式に悪戦苦闘したので一度bloggerの使い方を調べる必要がある
あと、今回別デザインのアイコンに変更し、
GooglePlayにアップロードしたのですが
どうも、一度アップロードすると保存しなくても
データが載るみたいで、バージョンの更新を上げないと
アプリをアップロードすることができませんでした。

割と参考にしているアプリの説明文をあらためて読んだのですが
自分のアプリと違ってわかりやすさが段違いだったので
また書き直しになりそうです。

これが終わったら、そろそろローカライズを増やすか
新しいアプリのネタを練るとかしたい

2017年9月4日月曜日

2017-09-03 到達点メモ



remoteurlを調べたい場合は
git remote -vをする
割とよく忘れるので注意

参考サイト


git addすることをインデックスに登録するという
git add . しても予め含まれないようにするには
.gitignoreに設定を書けばよい。

既に過去にコミットしたファイルを含めないようにするには
以下のようにコマンドを打てばよい
git rm --cached ファイル名

なお --cached を付けないと
ファイルごと削除されるらしい。
なんかこのコマンドを試したとき
いつの間にかこれを指定したファイルが消えていたが
抜けたたんだろうか?もしくは操作ミス?
もしかするとコミット後にやったコマンドだから
コミットから削除するために消えたのかも。

git add . した後にきちんとインデックスに登録した内容が
除外されているか確認するには
git status とコマンドを打てばよい

自分はよくシェルコマンドを使って入力するので
do*.shって.gitigoneに書いておくと
良く使うコマンドを別けて書きたい時
に自動的にインデックスに含まれないようになるので便利

参考サイト


チュートリアルにherokuのコマンドでログを表示するコマンドを調べなさい
という演習があったので(正解はおそらくlogs)
調べてみたらdrainsというコマンドがあったので
ちょっと調べてみる。
どうも外部のサーバーにログを転送する機能らしい。
メイン処理はherokuにやらせるけど、監視だけは別のサーバーでやりたい時とかに
つかうんだろうか?

参考サイト


新しくアプリケーションを作るところから始めるのはちょっと面倒だったので
一からつくりなおして、今まで使っているgitのurlにpushしたら
コンフリクトを起こした。
本来ならきちんと調べたほうがいいんだろうが、そこは主題じゃないので
コンフリクトを起こしたフォルダを全部消し、git cloneでデータを持ってきなおした。
複数のpush先を持っている場合、データ内容が同じでも
remoteのurlは保持していないので、それぞれからremoteのurlを持ってくる必要がある
なお、クローンした場合は、クローンした先のremoteのurlは登録される
herokuに関しては以下のようにとってきた
heroku git:remote --app heroku_app_name
なお、remote_urlは特にインデックスに加えたり、コミットする必要はない

参考サイト

postgresの設定で躓いた。
調べてみたらMySQLでもクレジットカード登録すれば
5MBまでは無料で作れるらしい。

Railsに疲れたので後は別なことをやった。
というか本来の目的は、仕様書を比較的に楽に管理するためのツールづくりだから
あんましRailsそのものをやりたいわけじゃないんだよなぁ。
具体的にはVoiceTimerのGooglePlay用のスクリーンショットの作成をやった。
割と何書けばいいか迷ったが、いつの間にかアプリの一覧表示でも
スクリーンショットが表示されるようになったので結構馬鹿にできないと思う。

あと、今のアイコンって時計というのはわかるんだけど
声との関連性がわかりにくいのでそこをどうしようか考え中
最初は、Inkscape(SVG作成ソフト)のテキストで
VoiceTimerって入れるつもりだったのですが
AndroidStudioでSVG取り込む際に、
エラーになってテキストの部分が取り込めず
どうにもならなかった。

しょうがないので以下のように文字を使わない方向で試行錯誤した結果がこれです。

拡大してみる分にはあまり気にはならないのだけど
縮小すると何の画像かわかりにくくなるので
まだ調整がいりそう。

あと、ちょっとapkファイルを小さくできないかと思って調べてみたのですが
軽く調べた感じだと、zipalign、ProGuard、shrinkResources、IconFont
あたりでしょうか。
zipalignは使ってみたのですが、容量に差はありませんでした。
また、ProGuardは既に書かれていました。
shrinkResourcesは使ってみたらエラーが出まして
ザっとしか調べていないのですが、stackoverflowerの回答によると
gradleのバージョンを2.1.3に下げると動くらしい?
そして、今回のアプリに限って言えば、画像は全部ベクター画像なので
IconFontを使う必要がありませんでした。

とりあえず、今日はこんな感じでした。



参考サイト
年末の大掃除、アプリの容量を削減するためのチェックリスト
\build\intermediates\res\resources-anzhi-debug-stripped.ap_' specified for property 'resourceFile' does not exist

2017年9月1日金曜日

Vector画像でタブレット端末の対応の設定したけれども、最適化のヒントで対応していないと言われたら問い合わせをしよう


今回、VoiceTimerを使って設定した際に割と苦労したところです。

エラー内容は、【APK には一般的なタブレット画面密度に合わせたカスタムのドローアブルとアセットが含まれていること】でした。

ちなみに私の場合の対処方法は、vector画像をxmlに変換したファイルを
下記のように編集しました。具体的には、heightとwidthの値の部分を
dimenに置き換えました。

<vector
    android:height="@dimen/gear_icon_size"
    android:width="@dimen/gear_icon_size"

その後、dimen.xmlでそれぞれ解像度ごとにファイルを作り、
公式ドキュメントのガイドライン(4. タブレット画面向けに設計されたアセットを使用する)に従ってそれぞれの解像度に適した値を読み込むようにしました。
他にも細かい所を設定した気がしますが、大まかにはこの処理をした後に
apkをアップロードしました。

この状態でも、タブレット端末が非対応の扱いになっていたので
GooglePlayConsoleのヘルプの部分からメールでお問い合わせをし
そのあとにグーグルの方から、以下のアドレスに連絡するように
アナウンスを受けたのでそれに基づいて連絡しました。
https://support.google.com/googleplay/android-developer/contact/tabletq?hl=ja

幸い問題なかったようで大体二日ぐらいで返事が返ってきて
1~3日の営業時間内に対応してくれるとの事でした。

という訳でどう見てもタブレット端末に対応しているはずなんだけど、
タブレット対応してないと言われるという人は
グーグルさんにお問い合わせをしてみよう。

メモしていなかったので忘れてしまったのだが
私と同じように問い合わせをした人をネットで見つけました。


2017年8月24日木曜日

2017年8月17日木曜日

実機でローカライズの検証をする方法


ローカライズの実装をする際に、テストする方法を軽く調べてみたのですが
エミュレーターでの方法しか見つからなかったので、
実機で行う方法をメモとしてここに書いておきます。

◆検証環境
機種:AQUOS ea
バージョン:Android7.0

方法
1.設定画面を開く。

2.言語と入力をタップする




3.言語をタップする




4.英語がなければ、言語を追加をタップし
     英語を追加する




5.言語の設定は一番上のものが採用されるので
 デフォルトの設定にしたい言語を長押しして
 上にずらすと以下の画像のようになります。



以上です。良かったら試してみてください。