- 1. 【Flutter】カウンターアプリに書かれたコメントを解説する
- 2. API30対応でcookie認証が通らなくなった
- 3. 【Unity】AndroidアプリをGooglePlayに公開する
- 4. 【ReactNative】アプリのプロフィール画像を変えるときに下から出てくる選択欄(アクションシートというらしい)を作ってみる
- 5. 【androidアプリ】リリース直前に気を付けるべきだった4つのポイント
- 6. LocationManagerでAbstractMethodErrorが発生する件
- 7. QiChat MANIAX(2) ヘッダのキーワードを網羅する??
- 8. QiChat MANIAX(1) Topicファイルのルールについてイントロ編
- 9. 【初心者向け】ディープリンク技術の概要と注意点
- 10. 【Android】画像を選択して、ImageViewに表示 in Kotlin
- 11. Android12の変更点ピックアップ
- 12. Androidアプリ開発者としてのキックオフ 「Androidアプリ開発の教科書」を読んで
- 13. USB接続した実機を用いてAndroid Studioからのデバッグ
- 14. AndroidManifest.xml上書きできずAPK生成に失敗する場合の解消方法
- 15. WSLとAndroidエミューレーターを共存させる。
- 16. タップ時のripple(波紋)エフェクトがうまく表示されない
- 17. 【Android】Google Play Consoleで広告表示設定の変更をする
- 18. 【Realm】relationship と insert
- 19. スマートウォッチでタブレット上のビデオプレーヤーを制御できる、ビデオ再生の分散デモ
- 20. ToolbarのonCreateOptionsMenu()がFragmentから呼ばれないときの対処法
【Flutter】カウンターアプリに書かれたコメントを解説する
`flutter create` で新しく Flutter プロジェクトを作ると自動生成されるのが「カウンターアプリ」であることは、Flutter を触ったことがある方であればピンとくるのではないかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134943/20a5ec25-afe9-548f-0cff-32bb81fc16d1.png)
Flutter アプリ開発者にとっての初めの一歩とも言うべきカウンターアプリですが、その `main.dart` に書かれているコメントを読んだことがあるでしょうか。私は毎回全置換で消しています。
ただ改めて考えてみると、このコメントも __Flutter フレームワークの開発チームが Flutter アプリ開発者のためにわざわざ書いてくれたもの__ だと思いますので、この記事ではそのコメント全てを翻訳しながらしっかりと内容を確認してみたいと思います。
また、初学者向けの簡単な解説も交えつつ書いていければと思いますので、何かの役に
API30対応でcookie認証が通らなくなった
## 背景
2021年11月以降、AndroidアプリのAPIレベルを30以上に対応させる必要があります。
漏れなく対応に追われていたのですが、APIレベル29から30に上げたとたん、アプリの認証処理が失敗するようになったのでその調査の備忘録です。## 調査
認証系なのでcookie周りが怪しい…。
取り敢えずAndroid developerの変更内容を読んでいたのですが、cookie周りの取り回しが変更されたとかは見つかりませんでした。
[Android 10(API レベル 29)から Android 11(API レベル 30)に移行する](https://developer.android.com/distribute/best-practices/develop/target-sdk?hl=ja#pre11)仕方なしにアプリの実装を追いかけて、API29とAPI30で何が違うのか追っかけてみたところ
CookieManagerのsetCookieにてsecure属性が付与された項目がAPI30ではrequestに乗っかっていませんでした。なじぇ…と思いながら[ド
【Unity】AndroidアプリをGooglePlayに公開する
# Unity
下記項目を設定– 会社名
– プロダクト名
– アイコン
– パッケージ名
– ヴァージョン
– ビルド番号
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/10eb3668-d396-6d72-83e7-b16ea3edbcfe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/669b561b-03a3-b48e-9f26-0d3079903bc6.png)
ARM64にチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/76d5d0dc-4b0e-5933-0e67-80210f71cf4b.png)キーストアを登録
![image.png](https://qiita-image-store.s3.ap-
【ReactNative】アプリのプロフィール画像を変えるときに下から出てくる選択欄(アクションシートというらしい)を作ってみる
#画像のようなタップしたときに下から出てくる選択欄(アクションシート)を実装していきます。
![スクリーンショット 2021-09-02 19.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/a376d67b-7783-c693-5df1-e8dc538e6428.png)この機能はよくアプリのアイコンや写真を設定する時に使われていると思います。
実際にはiPhoneのappleIDのアイコンやLINEのトップ画を設定するときに使われています##プロジェクト作成、必要なライブラリをインストール
まずはReact-Nativeプロジェクトを作成します。
ちなみにExpoではなく、素のReactNativeで作っていきます。
作成方法はドキュメントなどを参考に進めてください。#####次に必要なライブラリをインストールします
yarnの場合“`yarn add react-native-cross-actionsheet
“`npmの場合“`npm install
【androidアプリ】リリース直前に気を付けるべきだった4つのポイント
##概要
Androidアプリ [ツケ台帳](https://play.google.com/store/apps/details?id=com.chelak.tsuke_daicho) のプログラミングが完了した後、リリースする直前にいくつか調整したので備忘録的にメモしてみます。 アプリの解説→[こちら](https://qiita.com/n_ku/items/de1675af32ca53acc562)
LocationManagerでAbstractMethodErrorが発生する件
現在、Androidで位置情報を取得する方法としては、[FusedLocationProviderClient](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient)を使用するのが一般的かと思いますが、一部のGMSの使えない環境も考慮してLocationManagerを使用する場合もあるかと思います。このLocationManagerでAbstractMethodErrorが発生するという現象に遭遇したので書いておきます。
# 何が起こるのか
パーミッションの取得とか諸々置いておいて、位置情報を取得しようとするとLocationManagerのインスタンスを取得して、requestLocationUpdatesにパラメータ付きでLocationListenerを登録します。
位置情報が取得できればonLocationChangedがコールされるので、ここでlocationを使ってごにょごにょします。“`kotlin
QiChat MANIAX(2) ヘッダのキーワードを網羅する??
#はじめに
今回はQiChat MANIAXの続編です!ヘッダのキーワードについて、詳しく見ていきましょう????#conceptで同類を定義する???
conceptは、リストの単語とフレーズを定義するものです。下記のように使います↓
“`
concept:(name) [word1 word2 “word3 word4”]
“`* word1とword2は個々に独立した単語
* word3とword4は複数の単語によるフレーズ。間に合うスペースのある単語を一つのフレーズとして扱う場合は、ダブルコーテーション(“)でくくってください
* nameはリストにつけるコンセプト名。コンセプトを使用するときに使います⚠️注意
フレーズとは文章ではなく単語の集まりであり、句読点は自動的に排除されます。
コンセプトはどの単語でもglobalであり、異なるTopicでも使用可能です?以下は使用例と実行例です。
“`
topic: ~introduction ()concept:(greetings) ^rand[おはよう スラマッパギ “許して ヒヤシンス”]
QiChat MANIAX(1) Topicファイルのルールについてイントロ編
#はじめに
前回のあとがきでも書きましたが、今回からはPepper SDK入門とは別に、QiChat MANIAXとしてTopicファイルのルールを詳述していきます?さて、[Pepper SDK入門(24)](https://qiita.com/kskrin/items/1ad470634d8b36cb1f5d)で触れたように、Topicファイルには先頭にファイルの名前を記述するなどのルールがありました。例としては次のようなものです。
“`
topic: ~introduction ()u:(ソルトちゃんこんにちは) ぼくPepperですけど
“`
今回はQiChat MANIAXのイントロダクションとして、このTopicファイルのルールの概要を見ていきます⛵️#ルール事始め〜郷に入った場合の郷を知る〜
ここで言うルールとは、ユーザー入力とPepperの返答を関連づけるものです。
区切り文字、ルールの機能や特徴が様々なケースに対応してくれます。恢恢!
ルールにはユーザールール、ユーザーのサブルール、Proposalの三種類があります。#ユーザーとPepperとルー
【初心者向け】ディープリンク技術の概要と注意点
チーム内で「ディープリンク」「ダイナミックリンク」「ユニバーサルリンク」等の用語の認識が合っているのか怪しかったので、整理してみました。
基本iOS目線で書いてますが、実装寄りではなく概念寄りの内容なので、Android開発者でも読めると思います。
私の認識違いなどがありましたら、コメント欄にてご教示いただけますと幸いです。
※この記事ではURL/URIの区別を厳密に意識せず、より馴染み深い”URL”に統一して記述しています。
# ディープリンク (Deep Link) とは
任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称であり、概念を表す用語です。
スマホアプリで代表的なユースケースは以下のとおりです。
– スマホのブラウザでWebコンテンツ内のリンクをtapした際に、AアプリのX画面に遷移させる。
– Aアプリのボタンをtapした際に、BアプリのY画面に遷移させる。# ディープリンクを実現する仕組み
## カスタムURLスキーム
– URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。
–
【Android】画像を選択して、ImageViewに表示 in Kotlin
# ➊ はじめに
「`画像を選択して、ImageViewに表示する方法`」として「**startActivityForResult** と **onActivityResult**」で実装していたのですが、Androidは日進月歩しているらしく、この方法で実装するのは`非推奨`になってしまいました。> 基盤となる startActivityForResult() API と onActivityResult() API はあらゆる API レベルの Activity クラスで使用できますが、AndroidX Activity と Fragment で導入された Activity Result API を使用することを強くおすすめします。
とのことなので、推奨方法をここ?「[`アクティビティの結果を取得する`](https://developer.android.com/training/basics/intents/result)」で調べつつ、実装してみたいと思います。
# ➋ どんな感じになる?
「`SELECT IMAGE`」ボタンを押下すると、カメラで撮った画像を選択する
Android12の変更点ピックアップ
久しぶりの投稿です。時間ができたのでせっかくなので。
そろそろAndroid12リリースの時期で、遅れましたが、今年も気になる変更点をピックアップします。
全部を取り上げるというより、既存のアプリへの対応という前提で、特に重要度の高そうなものに絞ります。Samesiteに関する変更がある(targetSdkVersion>=31時)ので、個人的に最優先でチェックすることをおすすめいたします。
各項目の詳細については、情報引用元が一番正確かつ最新なのでそちらをご参照ください。# 主な情報引用元
Android12関連ホーム
https://developer.android.com/about/versions/12?hl=ja
→ スケジュールもここから。
→ 日本語ページを正とするのが良いと思いますが、英語ページの方が更新が早いので、情報を早めに手に入れたい場合は英語に切り替えるのが良さそうです。Android12上でアプリを動かす際に適応される項目
https://developer.android.com/about/versions/12/behavio
Androidアプリ開発者としてのキックオフ 「Androidアプリ開発の教科書」を読んで
これまでにもちょっとだけAndroidアプリの開発に携わったことがあるのですが、散逸的な知識しか身に着いていないという反省点がありました。
幸い仕事の方も少し落ち着いているので、良い機会として基礎から体系的な学習に取り組んでみることにしました。手始めに「[Androidアプリ開発の教科書(第2版)](https://www.shoeisha.co.jp/book/detail/9784798152028)」という書籍を手に取ったのですが、これがかなり良かったので内容について簡単にレビューしてみたいと思います。
これからAndroidネイティブアプリの開発をやってみたいという方の参考になれば幸いです。# 書籍の概要
2019年7月に第1版が刊行されたのち、2021年4月に第2版が出版されました。
バージョンの差が大きいことでおなじみのAndroidStudioですが、割と新しい本ということで自分が読んだ2021年8月の時点では特にコンパイルエラー等なくサクサク進めることができました。
1章から17章まで、各章のテーマに沿ったアプリをハンズオン形式で開発していく構成となっています。
USB接続した実機を用いてAndroid Studioからのデバッグ
## 環境
Android Studio: Arctic Fox 2021.3.1
## 実機(スマホ等)での事前設定
– 設定 > システム > 端末情報 を選択
– ビルド番号を7回タップする。これで、開発者向けオプションが有効となる
– 設定 > システム > 開発者向けオプション を選択
– USBデバッグ を有効にする– 注
– 設定メニュー構成は、機種によるかも## デバッグ
– PCと実機(スマホ等)をUSBケーブルで接続
– Android Studioでプロジェクトを開く
– Run > Debug
AndroidManifest.xml上書きできずAPK生成に失敗する場合の解消方法
## 環境
* Android Studio: Arctic Fox 2021.3.1
* gradle 7.0.2## 現象
プロジェクトのビルドや実行において、以下のようなエラーがでて失敗する。
“`
Zip file ‘…\app\build\outputs\apk\debug\app-debug.apk’ already contains entry ‘AndroidManifest.xml’, cannot overwrite
“`## 原因
– 依存ライブラリの中にAndroidManifest.xmlが含まれている場合、そのAndroidManifest.xmlが先にAPKにコピーされる
– その後、本プロジェクトのAndroidManifest.xmlをコピーしようとするが、既に存在するためエラーとなる
– [参考] Android Gradle プラグイン 7系で使用されているzipflingerというライブラリで上書きチェックが厳密にされるようになったため、問題が顕在化した模様
– https://android.googlesource
WSLとAndroidエミューレーターを共存させる。
## 導入
一般的なAndroidエミュレーターはHyper-Vを無効しないと使えないのに対して
WSLはHyper-Vを要求するのでどうしても共存は厳しいように見えたが。物凄くよさげなものを見つけたので紹介する。
**なお宗教上の理由でBluestacksは使えないという方はここでブラウザバックしてもok。**
## 結論
**BlueStacks Hyper-V版**というのがあるらしい、というかあった。
最低限の動作環境やダウンロードリンクは下から。
[BlueStacks Hyper-V版を利用する方法 – bluestack.com](https://support.bluestacks.com/hc/ja/articles/360041390952-BlueStacks-Hyper-V%E7%89%88%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)これでAndroidエミュレーターとWSLの共存が可能になった。
以下は GentooWSL2 と Bluestacks(Hyper-V)
タップ時のripple(波紋)エフェクトがうまく表示されない
## 経緯
透過度を設定したViewをタップした際にエフェクトを表示したかったのですが、なぜだかうまくいきません。薄いような、またそもそも出ていなかったり。
なので試してみました。
## 結論
背景に対してmaskを指定すれば解決、でした。“`
“`## サンプル
下みたいな画面を作成して検証してみました。
![Screenshot_1630748499.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773816/3e91091c-02eb-fca6-9e95-c7094cfdbe93.png)
こんな感じの。(MainActivityは割愛)
“` activity_main.xml
【Android】Google Play Consoleで広告表示設定の変更をする 左メニューの「ポリシー」→「アプリのコンテンツ」
「広告」から現在の広告表示情報を変更
![スクリーンショット 2021-09-04 15.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/f50ba1c7-dbb3-b65f-3a4a-d4e5180af289.png)
【Realm】relationship と insert
![realm-java 10.8.0](https://img.shields.io/badge/realm–java-10.8.0-6E60F9)
`RealmObject` 派生オブジェクトが他の `RealmObject` 派生オブジェクトの参照を持つ場合、
参照元のオブジェクトを insert (もしくは update)すると参照先のオブジェクトも insert(update)される。例えば次のようなクラスが定義されている場合を考える。
“`plantuml
class From extends RealmObject {
@PrimaryKey id
name
}
class To extends RealmObject {
@PrimaryKey id
name
}From o- To
“`“`Kotlin
import io.realm.Realm
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.kotlin.wh
スマートウォッチでタブレット上のビデオプレーヤーを制御できる、ビデオ再生の分散デモ
# ビデオ再生制御シナリオ
最近では、ユーザーはスマートデバイスでビデオを見ることが多いですが、次のような多くの課題に直面しています。– ビデオプレーヤーを制御するには、大画面デバイスを手に持つ必要
– ビデオの再生中はデバイス上で他のタスクを動作できないこれらの課題を解決するには、以下の解決策を提案します。
– 軽量のデバイス(スマートウォッチなど)をリモコンとして使用し、大画面デバイスでビデオプレーヤーを操作する 。
– マルチコラボレーション API を使用してHarmonyOSアプリを開発し、クロスデバイスをデプロイ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50470/5929d0a9-220c-1c42-d054-eed198071187.png)
#Harmony OSはビデオ再生制御シナリオをどのように解決するか
Harmony OS がサポートするマルチデバイスコラボレーションは次の通リです。
![image.png](https://qiita-ima
ToolbarのonCreateOptionsMenu()がFragmentから呼ばれないときの対処法
一部のFragmentでのみ、とあるメニューを表示したかったのですが、メニューのvisiblityをうまくコントロールできず困りました。
というのも、ActivityからはonCreateOptionsMenu()やonPrepareOptionsMenu()が呼べるのに、Fragmentからは呼べませんでした。
すごくシンプルなのですが、
“`kotlin:HogeFragment.kt
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
setHasOptionsMenu(true)
(略)
}
“`これだけでした。
setHasPotionsMenu(true)を呼べば、onPrepareOptionsMenu()やonCreateOptionsMenu()も呼ばれます。“`xml