20190330のAndroidに関する記事は7件です。

Android RSS読み込み

AndroidでRSSを読み込む案件がありましたので、サンプルを書いて予習しました。
レイアウト等、雑です。

参考にさせてもらった↓こちらで、org.xmlpull.v1.XmlPullParser を使われていたのでそのまま拝借させてもらいました。
http://individualmemo.blog104.fc2.com/blog-entry-55.html
意外に繁雑なコードになっているので、もっとよいライブラリあるのかなと思いました。

ソースはGitHubに上げています。
https://github.com/higekick/RssReaderSample
Screenshot_1553955563.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AdMobのエラーコード覚書き

はじめに

AdListener#onAdFailedToLoad()のエラーコードがint値でいつも調べてしまう自分用メモです。

エラーコード表

code name
0 ERROR_CODE_INTERNAL_ERROR
1 ERROR_CODE_INVALID_REQUEST
2 ERROR_CODE_NETWORK_ERROR
3 ERROR_CODE_NO_FILL

エラー詳細

ERROR_CODE_INTERNAL_ERROR

(原文)Something happened internally; for instance, an invalid response was received from the ad server.

下記の細かいエラー以前の根深い何かが起こっているときに発生する。
お支払い情報が登録されておらずそもそも広告の配信がされていないときなど。

ERROR_CODE_INVALID_REQUEST

(原文)The ad request was invalid; for instance, the ad unit ID was incorrect.

広告のUnitIDが間違っている場合など、設定値が間違っている場合に発生する。

ERROR_CODE_NETWORK_ERROR

(原文)The ad request was unsuccessful due to network connectivity.

ネットワーク接続エラー、オフライン状態のときなどに発生する。
機内モードにすると再現できました(Pixel3, Andriod9)

ERROR_CODE_NO_FILL

(原文)The ad request was successful, but no ad was returned due to lack of ad inventory.

リクエスト自体は成功しているが、配信される広告がない場合に発生する。
設定やネットワークに問題がないにも関わらず広告が表示されないときはだいたいコイツ。
特にアプリの開発初期段階などで起こるイメージ、明確な理由は分かりませんが広告ネットワークが最適化されていないのかなと想像しています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Flutter 1.2.x 環境をmacOS上に構築する

なぜこの文章を書いているか?

今までWebアプリばかり作っていたのですが、そろそろスマホアプリも作ってみたいと考え、React Native(もしくはEXPO)やNativeScript Vueなどつまみ食いしていたのですが、どうもしっくりこない。どうせなら今まで触ったことの無い言語でこれからも使えそうなモノ(Dart)を勉強しながらできるのが良いなとFlutterにたどり着きました。
基本的には本家サイトの通りにやっていけば良いのですが、折角なのでメモとして残しておこうと思います。
手順は自分がローカルで行った順番なので、本家サイトとは多少順番が前後します。

環境(2019/03/30現在)

  • macOS Mojave (10.14.4)
  • Xcode 10.2
  • Andoroid Studio 3.3.2
  • Flutter 1.2.1

Xcodeをインストールする

Xcodeがインストール済みならスキップしてください

  1. 「App Store」アプリを起動し、左うえの検索窓に"xcode"と入力しエンターキーを入れ検索
  2. 検索結果一覧の中の「Xcode」を「入手」>「インストール」でインストールを実行(しばらくかかります)
  3. 「Xcode」を起動し、「License Agreement」の内容を確認した上で「Agree」をクリック、パスワードを要求されるので入力し「OK」をクリック、諸々のインストールがさらに始まります
  4. 「メニュー」>「Xcode」>「Open Developer Tool」>「Simulator」でシミュレーターが起動する事を確認します

Homebrewをインストール

インストール

ターミナルを開き(方法は色々ありますが割愛)、以下を実行

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • Press RETURN to continue or any other key to abortと表示されたら「ENTER」キーを押します
  • パスワードを聞かれるのでパスワードを入力し「ENTER」キーを押します
  • インストールが終わったら以下を実行し正しくインストールされているか確認します

インストールを確認

以下を実行し、Your system is ready to brew.と出ていればOKです。出なかった場合は画面の指示に従って修正してください

$ brew doctor

Android Studioをインストールする

anyenv, jEnvをインストール

$ brew install anyenv
$ anyenv install --init
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ anyenv install jenv
$ exec $SHELL -l

homebrewでversionsをtapする

$ brew tap caskroom/versions

JDK1.8(java8)をインストールする

$ brew search java
(前略)
java8
(後略)
$ brew cask install java8

JDK1.8をjEnvにaddする

$ jenv add $(/usr/libexec/java_home -v 1.8)
oracle64-1.8.0.202 added
1.8.0.202 added
1.8 added
$ jenv versions
* system (set by /Users/user/.anyenv/envs/jenv/version)
  1.8
  1.8.202
  oracle64-1.8.0.202
$ jenv global 1.8
$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HomeSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

Homebrewを使ってAndroid Studioをインストール

$ brew cask install android-studio
  • アプリケーションフォルダの中の「Android Studio」を起動
  • "Welcome"画面で「Next」ボタンをクリック
  • "Install Type"画面で「Stuandard」を選択し「Next」ボタンをクリック
  • "Select UI Theme"画面では好きな方を選択し「Next」ボタンをクリック
  • "Verify Settings"画面で内容を確認し「Finish」ボタンをクリック
  • ダウンロードが始まりますのでしばらく待ちます
  • 途中"Intel HAXM"のインストール時に「機能拡張がブロックされました」と出るので「"セキュリティ"環境設定を開く」ボタンをクリックし「開発元"Intel Corporation Apps"のシステムソフトウェアの読み込みがブロックされました。」と書かれている横の「許可」ボタンをクリックします。

.bash_profileにANDROID_HOMEを設定

$ echo 'ANDROID_HOME=$HOME/Library/Android/sdk' >> ~/.bash_profile
$ exec $SHELL -l

Flutterをインストールする

ダウンロード

  1. まずは本家サイトmacOSを選びます
  2. zipファイルをダウンロードします(2019/03/30現在 flutter_macos_v1.2.1-stable.zip)。ダウンロード先は~/Downloads/とします

インストール

ターミナルを開き、以下を実行

$ mkdir ~/development
$ cd ~/development
$ unzip ~/Downloads/flutter_macos_v1.2.1-stable.zip

もしくは、Safariでダウンロードしてzipファイルが展開済みであれば以下

$ mkdir ~/development
$ mv ~/Downloads/flutter ~/development/.

.bash_profileにPATHを追加

$ echo 'PATH=$PATH:~/development/flutter/bin' >> ~/.bash_profile
$ exec $SHELL -l

flutter doctorを実行

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.14.4 18E226, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    ✗ Android licenses not accepted.  To resolve this, run: flutter doctor
      --android-licenses
[✗] iOS toolchain - develop for iOS devices
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS
      development.
      Download at: https://developer.apple.com/xcode/download/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
    ✗ libimobiledevice and ideviceinstaller are not installed. To install with
      Brew, run:
        brew update
        brew install --HEAD usbmuxd
        brew link usbmuxd
        brew install --HEAD libimobiledevice
        brew install ideviceinstaller
    ✗ ios-deploy not installed. To install:
        brew install ios-deploy
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS platform side's plugin code that
        responds to your plugin usage on the Dart side.
        Without resolving iOS dependencies with CocoaPods, plugins will not work
        on iOS.
        For more info, see https://flutter.io/platform-plugins
      To install:
        brew install cocoapods
        pod setup
[!] Android Studio (version 3.3)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] Connected device
    ! No devices available

! Doctor found issues in 4 categories.

問題の修正

いくつか問題があるので続いて一つずつ修正していきます

Android Studioのライセンスを読み、了解("y"を入力して"ENTER")します

$ flutter doctor --android-licenses

xcodeのインストールを完了します

$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

libimobiledevice, ideviceinstaller, ios-deploy, CocoaPodsをインストールします

$ brew update
$ brew install --HEAD usbmuxd
$ brew link usbmuxd
$ brew install --HEAD libimobiledevice
$ brew install ideviceinstaller
$ brew install ios-deploy
$ brew install cocoapods
$ pod setup

Android StudioにFlutterDartのプラグインをインストールします

  • Android Studioが起動していなければ起動します
  • Welcome画面の右下の歯車アイコンの「Configure」から「Plugins」を選びクリックします
  • 下段の「Browse repositories...」をクリックします
  • 左うえの検索窓にflutterと入力し一覧からFlutterを選択します
  • 右側に「Install」ボタンがあるのでクリックします
  • Third-party Plugins Privacy Noteを読んで「Accept」ボタンをクリックします
  • Plugin Dependencies Detectedと出て「Dart」プラグインのインストールを薦められるので「Yes」をクリックします
  • 先ほどの「Install」ボタンが「Restart Android Studio」となっているのでクリック
  • Pluginsウィンドウで「OK」をクリック
  • IDE and Plugin Updatesのモーダルウィンドウは「Restart」をクリックし再起動します

iOSシミュレータを起動するか、iPhoneなどの実機をUSB接続します

この状態でもう一度flutter doctorを実行します

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.14.4 18E226, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.2)
[✓] Android Studio (version 3.3)
[✓] Connected device (1 available)

• No issues found!

オールグリーンになりました :100:

テストアプリを実行してみる

プロジェクトを作成する

  1. Android StudioにFlutterプラグインを入れる事でWelcome画面に追加された「Start a new Flutter Project」というメニューをクリックします
  2. "Flutter Application"を選択し(デフォルトで選択されているはずです)「Next」ボタンをクリックします
  3. "Project name"など必要な内容を編集して「Next」ボタンをクリックします
  4. "Company domain"は自分で持っているドメイン名を入力します。デフォルトでは"example.com"となっています
  5. 「Finish」ボタンをクリックします

iOSシミュレーターを起動する

  1. 上段右側のアイコンが並んでいる中に「main.dart」があり、先ほどの手順でiOSシミュレーターを起動していれば、その左に「iPhone XR」等と表示があるのを確認します
  2. なければ、その「main.dart」と書かれているプルダウンの左のプルダウンメニューから「Open iOS Simulator」を選択しiOSシミュレーターを起動します

サンプルアプリの実行

  1. iOSシミュレーターが起動できたら、アイコンの列にある実行ボタン(緑色の▶)をクリックし実行します
  2. iOSシミュレーターに自動的にFlutterアプリがインストールされ、自動起動し「Flutter Demo Home Page」とタイトルに書かれた画面が表示されます
  3. アプリの右下の丸にプラスマークのアイコンをタップ(クリック)すると、中央の数字がカウントアップされます

Dartを少しだけいじってみる(Hot reloadの実演)

  1. iOSシミュレーターとAndroid Studioが並び、どちらかで一方を隠さないように調整します
  2. iOSシミュレーターが見えている状態で"main.dart"ファイルの23行目あたりを'Flutter Demo Home Page'から'ホームページ'に書き換え、"main.dart"を保存します
  3. 保存した次の瞬間iOSシミュレーター上のアプリのタイトルが「ホームページ」に書き換わるのが確認出来ます

終わりに

ひとまずこれでFlutterの開発環境が一通り揃いました。実機でテストするにはもう一手間必要なのですが、今回はまずmacOS上に開発環境を構築する事だけに絞ってみました。この環境を使って色々とアプリを作成していくつもりです :laughing:

参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Online Computer Science Homework Help

Have you difficulties in doing programming in computer science. Our full support through Computer science assignment help will overcome your difficulties. To acquire proper grip over computer science visit our webpage domyhomework.co now. You will surely score well after that. Our highly qualified experts provide depth explanation to make each concept understandable. for more info visit my website:https://www.domyhomework.co/computer-science-assignment-help.html
computer-science.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Android の AlertDialog の使い方とカスタマイズ

AlertDialog の使い方とカスタマイズについてまとめた。

基本的な使い方

タイトル、メッセージ、OKボタンを表示する。

    new AlertDialog.Builder( getContext() )
        .setTitle( タイトル )
        .setMessage( メッセージ )
    .setPositiveButton(OK , null )
        .show();

alertdialog_simple.png

3つボタン

Yes, No, Cancel ボタンを表示し、クリックリスナーを設定する。

    new AlertDialog.Builder(getContext())
        .setTitle( タイトル )
        .setMessage( メッセージ )
    .setPositiveButton( はい, new  DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // クリックしたときの処理
            }
        }) 
    .setNegativeButton(いいえ, new  DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // クリックしたときの処理
            }
        }) 
    .setNeutralButton( キャンセル, new  DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // クリックしたときの処理
            }
        }) 
        .show();

alertdialog_three.png

リスト表示

AlertDialog は ListView を内包している。
単一選択( #setItems )と、複数選択( #setMultiChoiceItems )の2つのメソッドがある。

      AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

        // set title
        builder.setTitle( タイトル );

        // set dialog message
        builder.setItems(new CharSequence[]{
                        項目名1,
                         項目名2,
                         項目名3,
                        キャンセル
                }, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                    //項目名をクリックしたときの処理
                } 
        ); 

        AlertDialog dialog = builder.create();
        dialog.show();

alertdialog_list.png

アイコン画像を追加する

new AlertDialog.Builder(getContext())
         .setTitle(タイトル )
        .setMessage( メッセージ )
        .setIcon( R.drawable.icon )
        .setPositiveButton( OK, null ) 
        .show();

alertdialog_icon.png

タイトルをカスタマイズする

文字サイズと文字色を変更し、中央揃いにする。

    TextView tvTitle = new TextView(getContext());
    tvTitle.setText(タイトル);
// 文字サイズ
    tvTitle.setTextSize(20);
// 文字色
    tvTitle.setTextColor( Color.BLUE );
// 中央揃い
    tvTitle.setGravity( Gravity.CENTER_HORIZONTAL );

new AlertDialog.Builder(getContext())
         .setCustomTitle( tvTitle )
        .setMessage( メッセージ )
        .setPositiveButton( OK, null ) 
        .show();

alertdialog_title.png

メッセージをカスタマイズする

文字色と背景色を変更する。

    TextView tvMessage = new TextView(getContext());
    tvMessage.setText(メッセージ);
// 文字色
    tvMessage.setTextColor( Color.YELLOW );
// 背景色
    tvMessage.setBackgroundColor( Color.GRAY );

new AlertDialog.Builder(getContext())
         .setTitle( タイトル )
        .setView( tvMessage )
        .setPositiveButton( OK, null ) 
        .show();

alertdialog_message.png

ボタンをカスタマイズする

スタイルを指定する。

下記を参考にした。
AlertDialogのスタイルをカスタマイズ

テーマの構成は、ソースから調べることもできるが、難解です。
https://chromium.googlesource.com/android_tools/+/HEAD/sdk/extras/android/support/v7/appcompat/res/values/themes.xml

注意 :標準の AlertDialog でなく android.support.v7.app.AlertDialog を使用する。

スタイルで、文字サイズと文字色を変更する

styles.xml
<style name="Theme_CustonButtonDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="buttonBarPositiveButtonStyle">@style/CustonPositiveButtonStyle</item>
</style>

<style name="CustonPositiveButtonStyle"
parent="Widget.AppCompat.Button.Borderless.Colored" >
<!-- 文字サイズ  -->
    <item name="android:textSize">@dimen/dialog_button_text_size</item>
<!-- 文字色  -->
    <item name="android:textColor">@color/colorBlue</item>
</style>
// スタイルを指定する
    new AlertDialog.Builder(getContext(), R.style.Theme_CustonButtonDialog )
        .setTitle( タイトル )
        .setMessage( メッセージ )
        .setPositiveButton(OK, null ) 
        .show();

alertdialog_button.png

画像を表示する

    ImageView imageView = new ImageView(getContext());
    imageView.setImageResource( R.drawable.sample );

    new AlertDialog.Builder(mContext)
         .setTitle( タイトル )
        .setView(  imageView )
        .setPositiveButton( OK, null ) 
        .show();

alertdialog_image.png

タイトル、メッセージ、ボタンをカスタマイズする

レイアウトを作成する。

下記を参考にした。
Dialog をフルカスタマイズする

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

      <!-- タイトル -->
        <TextView
            android:id="@+id/TextView_dialog_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:textSize="20sp"
            android:textColor="@color/colorBlack"
            android:layout_gravity="center_horizontal"  
           android:gravity="center_horizontal"  />

    <!-- メッセージ -->
        <TextView
            android:id="@+id/TextView_dialog_message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:textSize="16sp" />

        <!-- ボタン -->
        <Button
            android:id="@+id/Button_dialog_positive"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:textSize="20sp"
            android:background="@drawable/bg_button"
            android:layout_gravity="center_horizontal" 
           android:gravity="center" />    

    </LinearLayout>
    View view = mLayoutInflater.inflate( R.layout.custom_dialog, null );

       TextView tvTitle = (TextView) view.findViewById(R.id.TextView_dialog_title);
        tvTitle.setText(タイトル);

       TextView tvMessage = (TextView) view.findViewById(R.id.TextView_dialog_message);
        tvMessage.setText(メッセージ);

        Button btnPositive = (Button) view.findViewById(R.id.Button_dialog_positive);
        btnPositive.setText( OK );
    btnPositive.setOnClickListener(new View.OnClickListener() {
// クリックしたときの処理
        }); 

    mDialog = new AlertDialog.Builder(getContext())
        .setView( view )
        .create();
    mDialog.show();

alertdialog_layout.png

入力用のダイアルログを作成する

上記の「タイトル、メッセージ、ボタンをカスタマイズする」と同様に、入力用のレイアウトを作成する
詳細は割愛する。

alertdialog_input.png

github にサンプルコードを公開した
https://github.com/ohwada/Android_Samples/tree/master/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者】Androidアーキテクチャの種類メモ

※知識ゼロの大学生が勉強会に参加してよくわからなかった単語を覚えておくために書き留めるためのメモです。もし、ここは違うぞ!というような箇所があればぜひ教えてください!:bow:


この前、DroidKaigi2019の報告会のイベントに行ってきました!その中で、スピーカーさんたちのLTで多くでできたキーワードの一つが「アーキテクチャ」だったので、初心者なりにメモしました。:relaxed:

Androidアーキテクチャの紹介と流行り

Androidのアプリ開発にもにはアーキテクチャの選択肢がたくさんありますが、DroidKaigiでも毎年アーキテクチャがキーワードに上がり続けているほど、アーキテクチャには正解がなく改善し続けるもののようです。

以下は、アーキテクチャの種類メモです。

  • MVP(model view presenter)
    • 描画と画面のふるまいとロジックに分けるアーキテクチャ
  • MVVM
    • 描画と画面保持と入力の変換とロジックにわけるアーキテクチャ
  • Redux(flux)
    • データフローに関するアーキテクチャ
  • MVI
    • Reduxの思想をMV○○に持ち込んだアーキテクチャ
  • clean architecture
    • システムを層に分割し方針と詳細を分割するためのアーキテクチャ

MV○○系とflux系とclean architecture系統で分けられるのかな?
まあ一つのアプリに様々なアーキテクチャが混在してしまったときの対策になりうるマルチモジュールというのもあるそう。

公式アプリで使われているアーキテクチャはこのようになっているようです。
2017年:MVVM
2018年:AACベースMVVM
2019年:AACベースMVVM + Flux

スピーカーさんによると、アプリはWebの拡張ではなくなってきており、androidの進化とアプリの複雑化によりアーキテクチャは今後も変わり続けるだろうとのことです。

javaを勉強してもっとアプリ開発をしてみれば今回の話ももう少し理解できるかなあ。勉強頑張ります!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Google関係のWEBページ、WEBドキュメントを簡単に英語版に変更する方法(小技)

〇概要

Androidアプリ開発などGoogle関係の仕事をしていますが、最近はWEBページやWEBドキュメントを日本語版も用意してくれているので、とても助かります。

しかし、日本語のドキュメントは更新が遅かったり翻訳の内容が間違っていたりで、最新の情報が欲しい場合は英語版を読まないといけません。
かといって設定から切り替えるのは面倒です。

そんなときは、パラメータに
・言語を変更
hl=en

・地域を変更
gl=US

と設定すれば、一時的に簡単に変更できます。

・言語コード一覧
https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7
・地域コード一覧
https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

(例)

https://developer.android.com/google/play/developer-api
https://developer.android.com/google/play/developer-api?hl=en

〇WEB検索の場合

英語だと日本語の10倍情報が得られると言われています。
日本語だと日本人向けの解説サイトが上のほうに表示されやすいですね。

https://www.google.com/
で検索
search1.png

https://www.google.com/?hl=en
で検索(gl=USもつけるとより英語サイトが上に表示されます)
search2.png

〇Google Play ストア検索の場合

Google Play Storeの表示も、海外では何が流行っているのか分かります。
レイアウトも違うようです。
(日本はゲームばかり・・・)

https://play.google.com/store/apps
game1.png

https://play.google.com/store/apps?gl=US
game2.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む