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

2022年11月20日日曜日

最近のAndroidスマホはSDカードが非対応になってきていてツライ。。。

 

こんにちは。よっしーです。

昔からAndroidスマホの強みとして、ストレージ容量をSDカードで拡張できる。
というメリットがあり、それを理由にAndroidスマホを使っている人も多いんじゃないでしょうか。

が、最近のAndroidスマホ事情としては、高性能、コンパクト化。という理由から
SDカードを廃止する流れになってきています。。。

私が使っているミドルスペックのAndroidスマホは、かろうじてSDカードを
採用している機種ですが、ハイエンドモデルや新しい機種だともうSDカードに
対応していないですよね。。。

最近のスマホはストレージにUFS(Universal Flash Storage)が使われていて、
読み書きがべらぼーに速くなっているけど、SDカードだと同じような読み書き速度が
出ない。ってことが一番の理由なのでしょう。

4K動画なんかはストレージの書き込み速度がかなり速くないと
録画に対するデータ書き込みが追い付かずに途中で止まってしまいますもんね。

なので、録画データは基本スマホ本体のストレージにしか保存できないような
制限になってしまいます。


で私、AIMEKチャンネルのYouTube動画をスマホで収録するのですが、
いろいろ動画撮影しているとあっという間にスマホが録画データでパンパンになります。

その都度、データ吸い出して容量空けてとかやってますが、すごい面倒なんです。
スマホで撮影しているYouTuberさんたちはデータ管理どうしてるんでしょう。。。w
やっぱりクラウドとか使ってるんでしょうか。

クラウドにデータ同期するってのもよくあるケースだと思いますが、
個人的にあまりクラウドにデータ置くのが好きじゃなくて、自分の環境内に
データを管理したい派ですw

なので録画速度にも負けない大容量で拡張可能な記憶メディアが出てくることを
切に希望しています。。。

ちなみに、スマホデータの吸い出しは少しでも手数を少なくするために、
自宅のNASとスマホアプリで連携を取っていて、スマホアプリからWifi経由で
サクッと転送する形にはしています。




PC経由でスマホにUSB接続してデータ吸い出したり、というまどろっこしい作業はありませんが、
多少時間がかかる。というところだけが不満点ですね。。。



最近のAndroidスマホもiPhoneみたく、内蔵ストレージ容量によって料金が
変わったりしていますが、個人的にはストレージを抜き差し出来て再利用
できるような仕組みになってもらいたいものです。

ではまた~。

2021年5月28日金曜日

「こうべ避難ナビ」アップデートしました!

先日、当社のモバイルアプリ「こうべ避難ナビ」をアップデートしました。
無料でダウンロードできますので、ぜひご利用ください。

Download on the App StoreGet it on Google Play

神戸市のホームページで公開されている緊急避難場所のうち、灘区、中央区、長田区、須磨区のデータが、令和3年3月30日現在のデータに更新されていました。今回のアップデートではそれらを反映しました。

データの差分を見つけるために、PDFファイルからテキストを抽出し(手作業!)、そのテキストとアプリデータから抽出したテキストを、ツールを使って比較しています。

なぜExcel/CSVデータではなく、PDFのデータを使っているかというと、


でも書いたように、これまでPDFのデータの方が新しかったからなのですが、
今回、Excel/CSVも【令和3年3月】として公開されています。

PDFのデータと比較すると、主に東灘区、北区、垂水区のデータで差異がありました。(もしかしてExcel/CSVの方が新しい???)
どちらが正しいのかは分かりませんが、そのうちデータの差異をなくしてくれることを期待しましょう。

またいつか、どこかで。

2021年1月22日金曜日

VirtualBox で Android x86 を動かすと黒画で止まってしまう!


こんにちは。よっしーです。

VirtualBoxでAndroidを動かす時にハマってしまったので、

トラブル解決した手順を記載したいと思います。


VirtualBoxにAndroidをインストールする手順については

検索するといっぱい出てきますので割愛します。


実際にAndroidをインストールして起動すると、私の環境だと

黒画になり、ここから何も進まなくなります。


で、この症状は使ってるパソコンのグラフィック系の環境に依存するようです。

黒画にならず、普通に動作するのがほとんどのようですが、私のPC環境がハズレだったようです。。。


で、対処方法ですが、起動パラメータを変更する必要があります。

起動時にbootメニューが出ますが、この時に 'e' を押してください。


で、起動パラメータが表示された画面にくるので、ここでもさらに 'e' を押します。


起動パラメータの編集が可能になります。


一番右までカーソルを移動し「nomodeset i915.modeset=0」を追加します。


パラメータの詳細は以下サイトなど、具体的な解説があります。

https://wiki.archlinux.jp/index.php/Kernel_Mode_Setting


私が使用しているPCのグラフィックチップはIntel内蔵だったので、

i915.modeset=0 を追加しています。


i915.modeset=0 のパラメータはなくても起動はするものの、

ありとなしだと動作のスムーズさが違うように思いました。


起動パラメータを追加した後、'Enter' を押すと元画面に戻り、

続けて 'b' を押すと無事に起動することが出来ました。


Google の Playストア も使えますし、そこからアプリをインストールすることもできます。


Playストア からインストールしたアプリも使えます。(動かないものはいくつかありますが。。。)

youtube だって見れますよ。


Androidアプリを開発している人で、エミュレーター等の動きが重たく

困っている。という人もいるかと思います。

仮想環境だとそれなりにスムーズに動作するので、こういった環境を利用してみるのも

いいかもしれませんよ。


ではまた~。

2020年12月4日金曜日

「こうべ避難ナビ」アップデートしました!

 10月に「こうべ避難ナビ」をリリースしました。

「こうべ避難ナビ(for iPhone/iPad)」バージョンアップしました!


リリース時、神戸市のホームページで公開されていた緊急避難場所データは、2018年、もしくは2019年のものでした。
先ごろ、各区のデータが2020年6月1日現在に統一されて公開されたので、データを更新し、アプリをアップデートしました。
ぜひ、ご利用ください。
Download on the App StoreGet it on Google Play

リリース用モジュールアップロードでエラー


アップデートするために、Google Play Consoleでリリース用のモジュールをアップロードしようとしたところ、

アップロード証明書で署名されていない APK をアップロードしました。
使用する証明書は同じである必要があります。
アップロード証明書のフィンガープリントは

SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

ですが、アップロードした APK の署名に使用されている証明書のフィンガープリントは

SHA1: ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ

です

と、エラーが発生しました。

そうなんです。
キーストアのパスワードが分からなくなり、新しく作成したキーストアを使用していたのです。

このアップロード鍵を紛失した場合の対応は、Play Console ヘルプに書かれています。

1.新しく作成したキーストアからアップロード鍵の証明書をエクスポートする。
2.1の証明書を付けて、サポートチームに鍵のリセットを依頼する。

依頼から20分ほどして、新しいアップロード鍵の登録完了メールが届きました。
ただし、すぐにはアップロードできず、メールに記載されている新しいアップロード鍵の利用可能日時以降にアップロードすることができました。

またいつか、どこかで。

2020年10月23日金曜日

「こうべ避難ナビ(for Android)」リリースしました!

前回の続きです。

「こうべ避難ナビ(for iPhone/iPad)」バージョンアップしました!

その前に、、、

「こうべ避難ナビ」をAndroid向けにもリリースしました!
Androidスマホをお持ちの方はぜひご利用ください!
Get it on Google Play
iPhone/iPad向けとAndroid向けの違いの一つは、電話をかける操作です。
iPhone/iPad向けでは、ウィンドウ内の電話番号のリンクをタッチします。




















Android向けでは、ウィンドウを長押しします。




















経路の表示方法変更

iPhone/iPad向けVer.1.1では、アプリ内でルートを表示していました。

今回、ルート表示は使い慣れたマップアプリにまかせています。
iPhone/iPad向けではウィンドウ内の画像を、Android向けではウィンドウをタッチすると、マップアプリが起動し、徒歩でのルートが表示されます。

iPhoneとAndroidの両方をお持ちの方は、それぞれが提示する経路を比べてみても面白いかもしれません(笑)


遠く離れた場所ではルートがまったく異なることも。
こんなに遠くまで歩いて避難することはないでしょうけど・・・














またいつか、どこかで。

2020年10月2日金曜日

AndroidアプリのDBファイルを取り出してみた!

Xamarin.Formsでモバイルアプリを開発しています。
デバッグしているAndroid端末からSQLiteのデータベースファイルを取り出す方法のメモです。

まず、DBファイルの場所を確認します。
Visual Studioの「ツール」-「Android」から「Android Adb コマンド プロンプト」を起動します。
シェルを起動し、パッケージ名を指定してrun-asコマンドを実行します。


> adb shell
(デバイス名):/ $ run-as jp.co.aimek.xxxxx


リリースビルドされたアプリでは


(デバイス名):/ $ run-as jp.co.aimek.xxxxx
run-as: package not debuggable: jp.co.aimek.xxxxx


となるので、デバッグ版が必要です。

アプリのフォルダを確認します。


(デバイス名):/data/data/jp.co.aimek.xxxxx $ ls
cache code_cache files shared_prefs


filesフォルダの中に入ります。


(デバイス名):/data/data/jp.co.aimek.xxxxx $ cd files
(デバイス名):/data/data/jp.co.aimek.xxxxx/files $ ls -a
. .. .__override__ .config .local


.localの中をさらにたどっていくと、DBファイルが見つかりました。


(デバイス名):/data/data/jp.co.aimek.xxxxx/files $ cd .local
(デバイス名):/data/data/jp.co.aimek.xxxxx/files/.local $ ls
share

(デバイス名):/data/data/jp.co.aimek.xxxxx/files/.local $ cd share
(デバイス名):/data/data/jp.co.aimek.xxxxx/files/.local/share $ ls
XXXXX.db3


シェルを終了し、adbコマンドでDBファイルを取り出します。


> adb exec-out run-as jp.co.aimek.xxxxx cat files/.local/share/XXXXX.db3 > XXXXX.db3


またいつか、どこかで。

2020年1月31日金曜日

Androidスマホを機種変更してみた!

スマホデビューから3年、このたび初めてスマホの機種変更をしました。
変更前のスマホのAndroidのバージョンは6.0.1、新しいスマホは9です。

まず、個別のアプリで引継ぎが必要なのは、おサイフケータイとLINEですね。
nanacoもWAONもアプリ内にある機種変更の手順にしたがえば、問題なく新しい端末に引き継ぐことができました。
また、LINEも「あんぜん引き継ぎガイド」にしたがい進めていけば、トーク履歴がきちんと引き継がれました。


Googleドライブへのバックアップ


次に本体のバックアップです。
「バックアップとリセット」というメニューを選択し、「データのバックアップ」をONにします。



この設定は購入以来ずっとOFFのままで、これまで一度もバックアップを取ったことがありませんでした。
Googleドライブのバックアップを見ても、バックアップは存在しません。



手動でバックアップはできないようで、しばらく放っておくとバックアップが作成されていました。
(一説によると、WiFi環境が必要とか、電源ケーブルを接続し充電状態にしておくとか・・・)



バックアップの中身を見ると、アプリのデータが保存されているようですが、たったの13個!?



どうやらGoogleのアプリを中心に、いくつかのアプリしかバックアップされていないようです。



microSDへのバックアップ


「バックアップとリセット」から「データ引継」を選択します。
「microSDにデータ保存」を選択すると、保存するデータが選択できます。



最初は、先の「データのバックアップ」との違いがよく分からなかったのですが、電話帳やメッセージのデータが保存できるようです。


その他にバックアップに関する項目はないようなので、うまくいかなければ手作業でやるしかないな、と覚悟を決めて、新しい端末の設定に臨みました。


セットアップ


新しいスマホの電源を入れ、セットアップを進めたところ、実際には旧端末とBluetooth接続して、簡単にデータ移行することができました。具体的には、旧端末のGoogleアプリで「デバイスのセットアップ」と入力して、、、という手順になるのですが、スミマセン!その時の画像はありません!
旧端末にインストールされていたアプリがすべて新端末に自動的にインストールされ、結果的にGoogleドライブに保存したバックアップデータは使用しませんでした。
その後、microSDからのデータを取り込み、電話帳データ等も設定することができました。

ただ、各アプリのアカウント情報は移行されないようで、各アプリを起動後、あらためて入力する必要がありました。
(昨年、iPadからiPadへ移行した際には、それらも引き継がれていたような記憶があるのですが・・・)

またいつか、どこかで。

2019年11月17日日曜日

Androidの動画編集アプリが多すぎて困る。。。


こんにちは。よっしーです。

少し前からスマホで動画編集をいろいろと試しているのですが、

正直、どのアプリを使えばいいのか、アプリの数が多すぎて困っています。


iPhoneの場合だと「iMovie」というアプリがAppleから提供されているため、

このiMovieで動画編集する。というのが定番なのですが、


Androidの場合は、公式の動画編集アプリがないので、

Playストアに動画編集アプリが乱立してしまっており、

ここから自分好みの動画編集アプリを探し出さなければいけません。


とりあえず、Playストアから、ダウンロード数の多いものを

2,3つインストールし、動画作成してみました。


どれもある程度簡単に動画作成出来たので、

「お、どれでもイケるやん!」

と思ったのですが、作成した動画を見てみると、

アプリのロゴ(これをウォーターマークという)が動画に張り付いて表示され

いかにも無料アプリで作りました。という感じになってしまいます。


アプリに課金することで、このウォーターマークを外すことは可能なのですが、

iMovieは無料でウォーターマークが付かないことを考えると、

この機能を外すために課金するのもどうかな。。。と思ってしまいます。


で、結局、Playストアの情報だけで自分に合うのを探すのはなかなか難しく、

アプリの機能比較をやっているサイト等を見ながら、良さそうなのを探しました。


ダウンロードしてみて、動かしてみると、いまいちな使用感だったり、

使用しているスマホと相性が悪く、うまく動作しなかったりと、

なかなか期待するものが見つからず、さながら宝探しのようです。。。


で、行きついた先は「VLLO(ブロ)」というアプリ。


・iMovieと似たような感じで、UIが割と直感でわかる。

・ウォーターマークももちろんなし。

・ミドルクラスのスマホでもそこまで重たくない。

・モーションスタンプ等、使える演出が多い。

・課金アプリのため一部機能が制限されているが、買い切りで950円と他アプリに比べても安い。

といったところが良い点だと思います。

無料でも十分実用できるアプリだと思ったので、まずはこのアプリを使って動画編集に慣れていこうと思います。

皆さんも興味があればぜひ使ってみてください。

ではまた~。

2019年9月23日月曜日

放置されたアプリの末路

スマホはAndroid派のやっまむーです、こんにちは。

随分と前になりますが、個人的にAndroidアプリを作って公開した事があります。
公開した時にニュースサイトで取り上げられた事もあり、
ダウンロード数がグッと増えたのはとても嬉しかったです。


あれから9年

随分と放置していましたが、ふと今どうなっているのか気になり
管理画面にログインする事にしたのですが・・・、


( Д ) ゜゜

ストアから削除されてる!?

何があった?

放置している間に何があったのか、削除された理由は何だったのか。
その理由は管理画面に大きく表示されていました。

ポリシー違反ですか。。。
どうも放置していた間にGoogle Playのポリシーに変更があり、私のアプリはそれに違反していたようです。
これはGoogleが全面的に正しいですね。

何が問題だったのか調べてみると、どうも詳細がメールで送られていたようです。
結構前に来てました
どうやらセキュリティに関する部分で変更があったようです。
何も対応していなかったので、最終的に2018年5月に削除しましたという報告メールもありました。

ちゃんと管理しましょう

さて、これを対応するとした場合、当時の開発環境が必要になります。
9年も前、その間に何度かPCも引っ越しを繰り返してます。
一縷の望みをかけてHDDの中を調べていくと、なんと環境が一式ありました!
当時の私、色々ヒドイ・・・
今はGitHubのように便利なサービスがありますし、ちゃんと管理できる環境があります。
皆さんはこんな雑な管理などせず、自分が作ったものを大事に管理してください。

それでは、今回はこのあたりで。
ではではー。

2018年6月23日土曜日

IBM CloudのNoSQL DBを使ってみよう ~第6章~(Android:ListViewにボタン追加でListItemのClickイベントが効かない)

どうも、もりもりです。

ListViewにボタンを配置する前はTextViewだけで、リストアイテムのクリックで
取消線や文字色を制御していましたが
編集や削除のImageButtonを追加するとListViewのItemClickイベントが
走らなくなっちゃいました。

ということで、ListViewのItemClickイベントとImageButtonのClickイベント、
どちらも走るようにする方法についてです。

ListViewのアイテムクリックイベント


まずは、ListViewのアイテムをクリックした際の
イベントリスナーを設定するメソッドです。

private void setListViewListener() {
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            LinearLayout layout = (LinearLayout) view;
            TextView textViewDescription = (TextView) layout.findViewById(R.id.task_description);

            toggleTaskCompleteAt(position);
            Task task = (Task) mTaskAdapter.getItem(position);
            ControlUtility.changeItemState(textViewDescription, task.isCompleted());
        }
    });
}

編集、削除クリックイベント


編集クリックイベントのソースです。

public void onClickTaskEdit(View v) {
    this.editPosition = (Integer)v.getTag();
    this.showDialog(DIALOG_EDIT_TASK);
}

削除クリックイベントのソースです。

public void onClickTaskDelete(View v) {
    int position= (Integer)v.getTag();
    this.deleteTaskAt(position);
}

ListViewのItemレイアウト


ListViewの一行一行のレイアウトです。
10行目の「android:descendantFocusability="blocksDescendants"」が
必要となります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
    android:paddingRight="?android:attr/listPreferredItemPaddingRight"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@color/list_item_color"
    android:descendantFocusability="blocksDescendants">

    <TextView
        android:id="@+id/task_description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"/>

    <ImageButton
        android:id="@+id/button_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="right"
        android:src="@android:drawable/ic_menu_edit"
        android:background="@color/list_item_button_color"
        android:onClick="onClickTaskEdit"/>

    <ImageButton
        android:id="@+id/button_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="right"
        android:src="@android:drawable/ic_delete"
        android:background="@color/list_item_button_color"
        android:onClick="onClickTaskDelete"/>

</LinearLayout>

本当はActivity.showDialog()も3.x系以降は非推奨となったので
DialogFragmentを使用したかったのですが、今回はそこまで手がまわりませんでした。
また時間を見つけて試したいと思います。


ではまた、いつの日か~。

2018年6月16日土曜日

IBM CloudのNoSQL DBを使ってみよう ~第5章~(Android:テキストに取消線を入れる)

どうも、もりもりです。

今回は、ListViewの行をタップした際にTextViewのテキストに
取消線を入れる方法について説明します。

下記のTask5やTask7のように、完了したことがわかるように
取消線を入れ、文字色を変更するようにしました。


テキストに取消線を入れる


TextViewとフラグを渡して表示を変更するメソッドを追加します。

TextViewからTextPaintを取得し、そやつに対してsetFlagsするだけです。

public static void changeItemState(TextView textView, boolean flag) {
    TextPaint paint = textView.getPaint();

    if (flag) {
        textView.setTextColor(Color.BLACK);
        // 取消線を入れる
        paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    } else {
        textView.setTextColor(Color.WHITE);
        // 取消線を外す
        paint.setFlags(textView.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
    }
    paint.setAntiAlias(true);
}

取消線を入れる場合は「Paint.STRIKE_THRU_TEXT_FLAG(0x10)」とOR演算、
戻す場合は反転ビットとAND演算するだけです。

次回予告


次回 は、ListViewのアイテムにボタンを追加した際に、
アイテム自体のクリックイベントが発生しなくなる場合の解決方法についてです。


ではまた~。

2018年6月8日金曜日

IBM CloudのNoSQL DBを使ってみよう ~第4章~(Android:ToolBarの常時表示方法)

どうも、もりもりです。

前回まではIBM Cloudについてでしたが、今回からはAndroidのお話になります。

今回は、ToolBarを常に表示させる方法を残しておきます。

私が使用しているGalaxy s7 edgeはメニューボタンがありません。
バックキーを長押しすることでメニューを表示できますが、
それはそれで使い勝手が悪いので
ToolBarを常に表示するよう変更しようと思いました。

レイアウト


サンプルは28~42行目だけでしたが、改変後はこんな感じです。
14~26行目がToolBarになります。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ToDoActivity">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay"/>

        </android.support.design.widget.AppBarLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="4dp">

            <ListView android:id="@+id/list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@xml/bg_transparent_gray"
                android:layout_weight="1"
                android:choiceMode="singleChoice"
                android:drawSelectorOnTop="false"/>

        </LinearLayout>

    </LinearLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_marginRight="100dp"
        android:layout_marginBottom="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_input_add"/>

</android.support.design.widget.CoordinatorLayout>

スーパークラスの変更


サンプルはListActivityを継承していましたが
AppCompatActivityを継承するよう変更し、
ListViewのイベントなどは別で実装しています。

public class ToDoActivity extends AppCompatActivity
implements OnSharedPreferenceChangeListener {

}

ツールバーの設定


onCreateに8,9行目を追加するだけでOKです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.d(LOG_TAG, "onCreate()");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_todo);

    // ツールバー
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ・・・
}

下記の赤枠ToolBarが常に表示されるようになりました。


メニュー表示設定


今回のメニューは4つあります。
・NEW
・Download(Pull)
・Upload(Push)
・Settings

ToolBarをご覧いただいておわかりの通り、「NEW」のみ表示されており
右上のメニューアイコンをタップすることで残りのメニューが表示されます。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:compat="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_new"
        android:layout_height="wrap_content"
        android:orderInCategory="100"
        compat:showAsAction="ifRoom"
        android:title="@string/action_new" />

    <item
        android:id="@+id/action_download"
        android:orderInCategory="100"
        compat:showAsAction="never"
        android:title="@string/action_download" />

    <item
        android:id="@+id/action_upload"
        android:orderInCategory="100"
        compat:showAsAction="never"
        android:title="@string/action_upload" />

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        compat:showAsAction="never"
        android:title="@string/action_settings" />

</menu>

showAsActionで、常に表示するか、メニュー内に入れるかなどを指定することが可能となっています。

<showAsAction>
詳細
ifRoom 表示するスペースがあれば表示する
withText titleのテキストを表示する
never 常に表示しない
always 常に表示する
collapseActionView actionViewLayoutで指定したアクションビューと関連付ける

次回予告


次回 はテキストに取消線を入れる方法を紹介したいと思います。


ではまた~。

2018年5月25日金曜日

IBM CloudのNoSQL DBを使ってみよう ~第2章~(Androidアプリの変更内容)

どうも、もりもりです。 

今回は、前回 紹介しましたAndroidアプリの変更内容についてです。

変更前と変更後の挙動


<変更前>
 ・Todoの完了/未完了の制御方法
   各アイテムの左に表示されたチェックボックスで制御する。
    完了時 :チェックON
    未完了時:チェックOFF
 ・アイテムタップ時
   ToolBarを表示、右上に「削除」メニューを表示する。
 ・削除ボタンクリック:
   選択中のアイテムを削除する。

<変更後>
 ・ToolBar(旧ActionBar)を常に表示
   メニューボタンがない端末でも使えるように、メニューを常に表示する。
 ・ListViewの背景色を黒の透過に変更
 ・Todoの完了/未完了の制御方法
   各アイテムをタップ
    完了時 :取消線を入れ、文字色を黒にする
    未完了時:取消線を消し、文字色を白にする
   ※各アイテムの左にあるチェックボックスを削除
 ・メイン画面の右下に追加ボタンを追加
   ToolBarのMenuから新規追加も可。
 ・リストアイテムの右端に編集ボタン、削除ボタンを追加

画面キャプチャ


メイン画面 メニュー 新規追加ダイアログ
編集ダイアログ  設定画面

アプリの設定


IBM Cloudと通信するためにAndroidアプリの設定をします。

前回の「CloudantNoSQL DBサービスの作成」の「5」で記載したサービスの資格情報と「7」で作成したDB名を設定します。

<設定>
設定項目 設定値
Cloudant user name 資格情報のusername
Cloudant db name DB名
API Key 資格情報のusername(Cloudant user nameと同じ)
API Password 資格情報のpassword

※初めは「API Key」に何入れんねん。。。と思ってたのですが、ソースコードを見ているとURIを生成しているところで
 資格情報のusernameとなっていました。
 ただし、読み取り専用など制限したい場合は「API Key」と「API Password」に別の設定値を入力することで可能です。
 この設定方法は次回でしたいと思います。

AndroidとクラウドDBの同期


設定が終われば、早速タスクを追加してアップロード(PUSH)してみます。

PCのブラウザからDBを見てみましょう。


ちゃんと同期できていました。

次回予告


次回 は、「アプリの設定」で説明しましたDBの権限設定についてです。


ではまた~。


2018年5月18日金曜日

IBM CloudのNoSQL DBを使ってみよう ~第1章~(まずは準備)

どうも、もりもりです。

今回はIBM CloudのCloudant NoSQL DBサービスを使ってみました。
IBM提供のAndroid用のクライアント・ライブラリのソースがあり、
その中にAndroidアプリのサンプルソース(Todo同期アプリ)があります。
そのサンプルアプリを改変をしつつ、試したことを書き残していきます。

章立て


・~第1章~(まずは準備)
~第2章~(Androidアプリの変更内容)
~第3章~(Cloudant NoSQL DBの権限設定)
~第4章~(Android:ToolBarの常時表示方法)
~第5章~(Android:テキストに取消線を入れる)
~第6章~(Android:ListViewにボタン追加でListItemのClickイベントが効かない)

※変更する可能性もあります

アプリの概要


Android端末に保存されたデータと、クラウド上にあるIBM CloudのDBサービスのデータを同期します。
Androidアプリは端末ローカル上にデータを保存するため、ネットワーク環境がなくても使用できます。
ネットワークに接続できる環境で、クラウド上にあるDBサービスに用意したテーブルと同期できます。
そのため複数端末からいつでもどこでも最新のTodoを確認、編集できます。
今回のクライアント対象はAndroidアプリのみですが、iOSアプリやPC上で動作するアプリも作成可能です。


事前に必要なもの


・IBMアカウント(ライト・アカウントでOK)
・Android開発のある程度の知識
・Android開発環境
  ・Windows 10
  ・Android Studio : 3.1.1
  ・Gradle Version : 4.4
・Androidのサンプルソース

Androidのサンプルソース


Androidのクライアント・ライブラリは下記で確認できます。

Androidアプリのサンプルソース(Todo同期アプリ)は上記Gitの「sync-android/sample/todo-sync/」にあります。

サンプルアプリの機能
・Todoの追加(端末ローカルに保存)
・Todoの削除(端末ローカルから削除)
・クラウド上のNoSQL DBと同期(Upload&Download)

CloudantNoSQL DBサービスの作成


1.リソースを作成
  ダッシュボード右上の「リソースの作成」をクリックする。



2.サービスの選択
  カテゴリ「データ&分析」の「Cloudant NoSQL DB」を選択する。



3.サービスの作成
  サービス名を入力して「作成」をクリックする。



  作成をクリックすると作成したサービスのトップ画面が表示されます。



4.サービス資格情報の追加
  メニュー「サービス資格情報」を選択し、「新規資格情報」をクリックする。
  ※のちにAndroidアプリからアクセスするための資格情報です。



  名前を入力して「追加」をクリックする。

5.サービス資格情報の確認
  追加された資格情報の「アクション」列の「資格情報の表示」を選択する。
  ※Androidアプリで設定する項目は「username, password」です。



6.DB画面の表示
  「LAUNCH」をクリックする。



7.DBを作成
  メニュー「DBアイコン」をクリックし、右上の「Create Database」をクリックする。
  DB名を入力し、「Create」をクリックする。



8.DBの確認
  メニュー「DBアイコン」をクリックする。
  todoappが作成されました。



以上で、DBの準備は終わりです。

次回予告


次回 は、このサンプルアプリの変更内容についてです。


ではまた~。