Translate

BTemplates.com

Powered by Blogger.

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

2018年3月10日土曜日

2018-03-07 到達点メモ


困った。
広告が表示されない。

今までも広告が表示されなかったことはあったのだが
今回は実際の広告ではなくテスト広告が表示されない。
何でだかわからないからなおさら困ってる

参考サイト:クイックスタート
参考サイト:公式ドキュメントのバナー広告の実装の仕方

Required XML attribute "adSize" was missing
てきなエラーも出たがこれは割と対処が楽だった
単にAdSizeの指定をするだけである
というかAdViewはどうもAdSizeの指定はどうも
オートコンプリートが効かないようだ

参考サイト:AndroidでAdMobのネイティブアドを横幅いっぱいに表示する

あと、ads:loadAdOnCreate="true"はもう使えないようなので
設定するとバグる

パッケージ名さえわかれば、アイコンとラベル名が取れるが
ラベル名は、此処で取らずにパッケージ名を取った時に保存して
持ってきた方がよいかもしれない
val icon = packageManager.getApplicationIcon(appPackgeName)
val appInfoList  = packageManager.getInstalledApplications(Context.BIND_AUTO_CREATE)
var labelName = ""
for (ai:ApplicationInfo in appInfoList){
if (ai.loadLabel(packageManager).toString() != null && ai.packageName.equals(appPackgeName)== true){
    labelName = ai.loadLabel(packageManager).toString()
    break
}
}

なんか詰まったので今日はここまで

2018年2月26日月曜日

2018-02-25 到達点メモ


一日で終わるかもと言っておきながら全然進まなかったが、
見直してみたら思ってたより進んでいた。
よく考えたらすぐできる実装なので実装した。できた。
そういう訳で、特定のアプリが立ち上がった時に割り込みで
立ち上がるようにすることができました。
やったぜ!!
他のアプリの状況を知りたい場合は、UsageStatsManagerを使うとよいらしい


下記のサイトを参考にした
[Android][Lollipop]UsageStatsManagerでgetRunningAppぽく取得する
Android 6.0 : UsageEvents method 'usageStatsManger.queryEvents()' is giving count 0 (zero)
【Android】getRunningTasksが使えなくなったLollipopでアプリ使用状況を取得する
[Android]自分のアプリが前面にいるかを判別する正しい方法(UsageStatsManager.queryEventsを使う(API21以降/要Permission)の項目)
ACTION_OUTSIDEが切り開くAndroidアプリ間連携の可能性 (2/4)


具体的に以下のように実装した

//履歴を取得の許可がでていなかったら、その画面に飛ぶ
if (isUsageStatsAllowed() == false){ startActivity( Intent("android.settings.USAGE_ACCESS_SETTINGS")) }
val userInfoString:String? = prefs.getString("PREF_KYE", null)
if (userInfoString != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ){
    var userInfo = gson.fromJson<UserInfo>(userInfoString, UserInfo::class.java!!)
    val stats = getSystemService(Service.USAGE_STATS_SERVICE) as UsageStatsManager
    val endTime = System.currentTimeMillis()
    val startTime = endTime - (10*1000).toLong()
    val nameList = ArrayList<ComponentName>()
    val usageEvents = stats.queryEvents(startTime, endTime)
    while (usageEvents.hasNextEvent()){
        Log.d(TAG,"usageEvents.hasNextEvent()")
        val event = android.app.usage.UsageEvents.Event()
        usageEvents.getNextEvent(event)
        if(event.eventType == UsageEvents.Event.MOVE_TO_FOREGROUND){
            val packageName = event.packageName
            val name = ComponentName(packageName, event.className)
            // リストにの先頭に追加する
            nameList.add(0, name)
            //普通にFOREGROUNDは複数あるようなのでbreakしない
        }
    }
    if(nameList.isEmpty() == false) {
        Log.d(TAG, "nameList[0].packageName:" + nameList[0].packageName)
        for (limitAppInfos: MutableMap.MutableEntry<String, LimitAppInfo> in userInfo.limitAppInfos) {
            if (limitAppInfos.value.limitFlag == false) {
                continue
            }
            val appPackageName = limitAppInfos.key
            if (nameList[0].packageName.equals(appPackageName)) {
                Log.d(TAG, appPackageName + " Looked")
                break
            }
        }
    }
}


◎此処までたどり着く際に詰まったところ


・uses-permission の設定

最初は以下のように設定していたのだが、エラー(赤の波線)が出ていた
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
で、以下のように設定しないとまずいらしい
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />
理由は後日調べます


・stats.queryEvents(startTime, endTime)で、どっちが最近の時間?

startTimeは昔の時間。endTimeは最近の時間


・getSystemService("usagestats")で書くと赤い波線が出る。

getSystemService(Service.USAGE_STATS_SERVICE)と指定してあげるとよい


・コード的に正しいはずなのに、現在アクティブなアプリのデータを取得しない

使用するアプリが履歴を読み取ることを許可していますか?

大体こんなところだと思う。
一時はどうなるかと思ったが無事今月の最低限の目標は達成できたので
今日はここまで。

2018年2月19日月曜日

2018-02-18 到達点メモ


トグルボタンのデザインのカスタム方法を見つけたが
今のところ、必要なくなるかも?
少なくとも優先度は下がったが、検証はしていないが調べておいたので
URLだけは貼っておく

参考サイト:Buttonの状態に応じて、text,textColor,BackgroundColorを変えるには
参考サイト:Android: トグルボタンのスタイル変更
参考サイト:トグルボタンの画像を変更する

ただ、On/Offでの動作はいるのでそれの実装はした

参考サイト:トグルボタンの実装


Gsonというライブラリを使うとスマートにデータ管理ができるらしい
確かにちょっと使ってみたが、色々読み書き用のデータを宣言しなくて楽だわ
これでやればキー一つで管理できる


あとlongからDateに変える方法は
var date:Date = Date(longData)
でできる



今回、コレクションのMapを使いたかったのでそれを実装
初期状態で宣言のやり方が見つからなくて
苦労したが以下のようにやればいけそう

class UserInfo {
    var limitAppInfos:MutableMap<String,LimitAppInfo> = mutableMapOf()
}

class LimitAppInfo{
    var limitFlag:Boolean = false
    var limitStartDate:Date? = null
    var limitEndDate:Date? = null
}

さて、今凄い問題なのがデータの受け渡しができない。
Activity間のデータの受け渡しってなんか特別な宣言はいらなかった気がするのだが・・・?

どうも本来intentと宣言してデータを取るところを
getIntent()と書いていたのが原因のように見える
this.intentでも動いているようなのだが
 testToggleButton.setOnCheckedChangeListener{}
の中でもintentを宣言してきちんと動くか確かめてみたが
自分のコード上では動くことが確認できた。

動かない場合は、特にJavaのコピペを所々やっている場合は
intentで取得しているかどうかを確認したほうが良い。

あと、しょうもないは話なのだが
マップデータを保存していたのだが
何度やってもデータが一つしか保存されないと思っていたら
データがある場合は、そのデータを使用するという設定をやっていなかった。
そりゃあ、何度やっても一つしか入らない訳だよ。

あと、今回リストViewからパッケージ名は表示したくないが
パッケージ名を取るという事をやりたかったので
テキストViewのvisibilityをgoneに設定してみたところ
狙い通りレイアウトに影響を出さないで
テキストViewに保存したデータを取得するということができた。

各アプリごとにOn/Offの保存と反映ができるようになったので
今日はここまで

2017年12月14日木曜日

2017-12-12,13 到達点メモ


対処方法を探している途中で使い道はないが
面白いものを発見したのでメモしておく

参考サイト:[Android/Kotlin] アプリの画面をスリープさせない/動画再生中はスリープを無効にする

具体的には、layout.xml に android:keepScreenOn=”true” を書くことで
画面をスリープさせないことができるのですが、通知画面でレイアウトを作りそこに先程の設定をすると通知画面が見える状態だとアプリがスリープしない状態になります。

スゴイ雑なやり方だけど、何処かに小さい透過ビューを作って
それのレイアウトに先程の設定をすれば、メインアクティビティは表示されていないくてもずっとスリープさせない状態にできるかも??

検証自体は面白そうですが、変な所で問題が起きそう気がするので実装はしません。

最終的には、サービスをフォアグラウンドで実行することにしたところ
スリープ中でも動くことは確認できた。
ただし、前の日記でも書いたが、この状態だとアプリが終了した時に
サービスが残ったままなので表示がおかしくなる。
そのため、サービス自体にアクティビティが終了しているかどうかを調べる機能が必要だった。
具体的には、アプリ起動中に特定のActivityを開いているかどうか判定するに書いてある内容をほぼそのまま使う。
ただし、自分の場合は、Activityがあるかどうかを是非としているので
onActivityCreatedにアクティビティのクラス名を代入するようにし、
(別のアクティビティへ遷移し、その後にMainActivtyに復帰した時に、
値が空のままになるのでこれだけでは使えない)
onActivityDestroyedで空にするようにする。
そうすることで、アプリをスライドして呼び出した場合
アプリが終了したことを察知できるようになる。

参考サイト:Androidで死なないServiceを実装してみた
参考サイト:アプリ起動中に特定のActivityを開いているかどうか判定する
参考サイト:[Android]自分のアプリが前面にいるかを判別する正しい方法
参考サイト:Checking if an Android application is running in the background


ただし、Kotlinでしか確認していないが、MainActivtyでクラス名を代入する際に以下のように実装すると問題が発生する

companion object {
        var name:String = MainActivity.javaClass.name
}

上記のように実装した場合、
nameの中身は(アプリの設定アドレス).MainActivityではなく
(アプリの設定アドレス).MainActivity$Companionになる。
検証した結果、companion object内でクラス名を呼び出した際につくようである。

対策自体は簡単で
companion object {
        var name:String = ""
}
にし、
onCreateで

name = this.javaClass.name

と呼び出せばよい。

なお、以下の面倒な文字列置換を行う必要はない。
companion object {
        var name:String = MainActivity.javaClass.name.replace(Regex("\\.MainActivity.*"),".MainActivity")
}

文字列置換とかエスケープとか正規表現などで参考にしたサイト一覧
参考サイト:特殊な文字の入力(エスケープシーケンス)
参考サイト:【Java】正規表現って何?
参考サイト:Kotlin の正規表現を使う
参考サイト:Kotlin公式ドキュメント-replace

メモ書きとして残しておくが、開発者設定できる機能の中に
充電中はスリープしないという項目があるので、充電中にスリープする場合は
その機能がONになっていないか確認すること。

テストしているが、幾つか動作不良を発見して修正している状態である。
バージョン違いのテストもそうだが、多分これはきちんとテスト仕様書を書いて
確認しないと★1の嵐になりそうである。

明日こそいい加減バージョンアップさせたい。

これ以上は集中できないので今日はここまで。

2017年12月8日金曜日

2017-12-07、08 到達点メモ


JobScheduleについて

恐らく何らかの制限をかけることを前提で作っているので
何の制限が掛かっていない状態で動くことは想定されていない

具体的にいうと以下のようにバッテリーの状態関係無し、ネットワークが繋がっていてもいなくても関係が無い、アイドル状態を無視する、というような設定をしていると、
JobScheduleを動かしたときに、java.lang.IllegalArgumentException: You're trying to build a job with no constraints, this is not allowed.というようなエラーが出る。

            builder.setBackoffCriteria(10000, JobInfo.BACKOFF_POLICY_LINEAR)
            val bundle = PersistableBundle()
            builder.setExtras(bundle)

            builder.setPersisted(false)
            builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
            scheduler.schedule(builder.build())


また、JobInfo.Builderでjobのサービス名を指定する際に、正しいパッケージ名とサービス名を指定しないとエラーになるので、注意すること。

恐らく今回の目的には、JobScheduleは使えないと思われる。
なので公式ドキュメントのバックグラウンド実行制限を読み直したところ
>>アプリがアイドル状態にある場合、バックグラウンド サービスの使用を制限します。 >>これは、ユーザーが認識しやすいフォアグラウンド サービスには適用されません。
とのことなので、フォアグラウンド サービスで動かせばいけそうな気がする

参考サイト:公式ドキュメント サービス
参考サイト:Service が Foreground で動いているか確認する
参考サイト:Serviceの挙動について
参考サイト:Android Marshmallow の Doze テストの正しい手順
参考サイト:[Android] Service の使い方
参考サイト:Android Oからのバックグラウンド・サービスの制限事項を実演する。
参考サイト:AndroidのServiceについて

情報を整理したいので今日はここまで。


2017年10月16日月曜日

2017-10-15 到達点メモ


VoiceTimerの対応言語でポルトガル語、フランス語、ドイツ語、スペイン語、ロシア語を追加してきました。

今回、よく考えたらYoutubeの方もアップロードしていたのでその対応も考えると割と手間がかかりました

ただ、最初の頃は言語ごとに動画を作っていたので、字幕で対応するようにしたのは
結構正解だったと思っています。
ただ、字幕データをそのままGoogle翻訳すると字幕の表示時間も変に翻訳してしまうので
そこの対応が面倒でした。

あと、字幕の動作確認をしていて思ったのですが
今公開している動画は、開発者向けオプションにあるタップを表示で視覚表示をするようにしているのですが、背景が白い部分だと小さい画面なら特に見にくい感じになります。
動画を見ている人が必ずしもパソコンでないことを考えると
寧ろ、Androidで見ている人が多い可能性が高いと思われるので
タップの視覚表示の色を白以外に変えられると便利そうだと思いました。

他の事をやっていたら時間が無くなったので

今日はここまで。

2017年9月13日水曜日

2017-09-13 到達点メモ


中間報告としてのメモ

//通知部分の作成

        NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_notification_clock)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                        RemoteViews customView = new RemoteViews(this.getPackageName(), R.layout.notification_layout);
        customView.setTextViewText(R.id.notification_title_id, "VoiceTimer");
        customView.setTextViewText(R.id.notification_text_id, mConstRParams.finish_button_name);

        Intent intent = new Intent(this, MyBroadcastReceiver.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.setAction(FINISH_ACTION);

        int request_code = ACTING_REQUEST_CODE;
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this,request_code,intent, PendingIntent.FLAG_UPDATE_CURRENT);
mConstRParams.finish_button_name, pendingIntent);
        customView.setOnClickPendingIntent(R.id.notification_button_id,pendingIntent);
        mBuilder.setContent(customView);
        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(mId, mBuilder.build());

//通知部分のレイアウトの作成

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ImageView
        android:id="@+id/notification_icon_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"/>
    <TextView
        android:id="@+id/notification_title_id"
        android:textColor="@color/gradient_start_color"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/notification_icon_id"
        style="@android:style/TextAppearance.StatusBar.EventContent.Title" />
    <TextView
        android:id="@+id/notification_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/notification_icon_id"
        android:layout_below="@id/notification_title_id"
        style="@android:style/TextAppearance.StatusBar.EventContent" />
    <Button
        android:id="@+id/notification_button_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/notification_text_id"
        android:layout_below="@id/notification_title_id"/>
</LinearLayout>


これで、表示はめちゃくちゃだが、ロック画面でもアプリ操作をすることができる。
現状アイコンの表示ができないのと、普段の表示と変わるので
これで統一する必要がある。

参考サイト
AndroidのNotificationでカスタムViewの高さを広げる
Adding button action in custom notification
NotificationのUIをカスタマイズする


Vector画像をbitmapに変換する際に参考にしたサイト
Getting Bitmap from vector drawable


メモ事項として
・remotelayoutを使う場合でも、setSmallIconは定義しなくてはいけない
・layout_marginを使用した後に、layout_marginLeftは適応されない
・layout_toRightOf系はLinearLayoutでは使用できない。きちんとRelativeLayoutになっているか確認すること

形は大体見えてきたので、あとは通常時の表示と合わせるのと
停止ボタン以外をタップした場合は、アプリを立ち上げる処理を入れることをやればよい。
これで大体の処理は終わるはず。
今日はここまで

2017年9月12日火曜日

2017-09-11 到達点メモ


進まなくても、何が駄目だったかをメモしないと
同じことの繰り返しになるのでメモをしないとダメだな。

通知エリアと通知ドロワーの二つがあり
今回自分がしたいのは通知ドロワーにボタンをつけて
アクティビティを立ち上げずに、アプリの操作をしたい

参考サイト
公式ドキュメント-通知

この機能はGoogleMusicで出来ることは確認した。

ボタンを作るのはAddActionを使えば作れる。

参考サイト
[Android] Android 4.1 で追加された Notification styles


現時点では、きちんと動作確認ができていないので推測になるが
おそらく、PendingIntent.getBroadcastで通知を飛ばし
受け取る用のクラスを作り、そこから操作するということをやるのではないだろうか?
構造的にはMainActiviyで発火を行い、MainReceiveクラスを作成しそこで
取得した後、そこからMainActiviyのクラスのストップメソッドを呼び出すなり
スタートメソッドを呼び出すなりすればよいと思われる。

参考サイト
Determine addAction click for Android notifications


まだ、ちゃんと読み込んでないけど
このサイトの内容が使えそう?

もう遅いので今日はここまで



2017年9月5日火曜日

2017-09-04 到達点メモ


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

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

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

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

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月29日火曜日

VoiceTimerを作っての反省点


メモを取るとか、きちんと調べるとか、毎日勉強だとか
そんな当たり前の話です。
当たり前のことを当たり前にやるのが大事という知り合いの言葉が身に沁みます。

◆反省点

1.名前を決定したら一度きちんとリサーチするべきだった。

最後の最後で変えたので、ある意味しょうがないのですが
名前が思いっきりかぶっていたのでちょっと失敗だったなと。


2.マジックナンバーは辞めよう。後からパラメーターを追加すると変更で死ねる

特に、解像度ごとにdimenを設定した時とが大変だった。


3.やる気が長続きする仕組みを何かしら作る必要がある。

本来ならば、もっと早く完成させるつもりだったし、それ自体は難しくなかった。具体的にいうと遅くても6月に入るころには終わらせるつもりだった。
完成直後になるとやる気が減退するので何処かで開発日記みたいなものを作るべきだったかも。


4.プログラミング以外の作業が結構多かった。

宣伝用の動画を作成したり、音声を録音したり、使える素材を探したり、
寧ろ、素材を作ったりなどなど結構いろいろしてました。
初めて尽くしなのも理由の一つではあると思いますが疲れました。


5.決めたバージョンはきちんとテストをする

外部にテストを頼んだ時に発覚したのですが、Android4.0系でバグが出たときがありました。結局、Android4.0系は諸事情で採用しないことになったのですが、多分指摘されなかったらずっと気が付かなかったのでこれ以降ちゃんとテストをするようになりました。


◆やってよかったこと

1.Excelで開発リストを作ってそれで管理したこと

これを使うと、今何の作業が残っていて、何をすべきなのかがわかるので便利だった。
今後は、仕様書を作ったら半自動的にテストに代わるようなツールが欲しい。
そんなツール今まで見たことがなかったので最悪作るしかなさそうだが……


2.外部に有料でテストを頼んだこと

間違いなくこれはやってよかったこと。自分でテストをやると甘えた妥協するのでそれを無くすためにやって本当に良かったです。今回のやつで言えば、デザインの統一やドラムロールの機能は指摘されなければ、間違いなく実装しなかった内容でした。


3.色々挑戦したこと。

お蔭で簡単な画像ならVector画像を作成できるようになったし、それについての知見も増えました。あとは多少ではありますが、正しく知識が身につきました。ActionBarはAPI21では使わないほうがいいくらいですけど。


◆その他

1.下手なサイトよりも公式ドキュメントの方が情報が沢山ある。

読解力がないので読み取るのがきつかったり、そもそもめんどくさかったりするので
そこらへんでまた苦労はしました。


2.ブログは新しい情報と、古い情報が入り混じっている

作成日が新しくても、古い情報をうのみにしている場合があるから要注意だぞ。
ActionBarとToolBarとかな!!


3.日本語より英語で調べたほうが早い。

日本語だとほとんど情報がないです。少なくともNumberPicker関連は、英語で色々調べて
ライブラリを使って解決できることをようやくわかったので。という過去の話どっかで見た記憶があるぞ……


4.場合によってはライブラリーを探した方がいいかも

変に質問掲示板で探してあれこれ試すよりは割とこっちの方が一発で解決できたりする。
もっとも、ライブラリを出している人が必ずしもドキュメントを整備する訳ではないので一度試行錯誤する必要はあるが。


5.技術は日進月歩。アンテナを張らないとおいてかれる

いや、マジで。少なくとも1~2年前に一回Androidの開発をしたけどRoboテストなんてなかったし、テストを記録するようなツールがあることを知らなかった。なのできちんとアンテナを張らないと楽できるところを無駄に苦労する羽目になる。


6.もうPGを4年近くやっているはずなのに新卒の人が書くような内容しか書けなくて悲しい。

きちんと勉強していなかったのがバレバレですね(泣)


他にもいろいろあった気がするけど、
とりあえずここまで。

2017年8月24日木曜日

2017年8月17日木曜日

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


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

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

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

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




3.言語をタップする




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




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



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