- 1. Androidアプリから自然言語処理(DialogFlow)
- 2. ExoPlayerのUI変更方法
- 3. Xamarin.Forms ガワネイティブアプリで、C# から JavaScript へのリクエスト~レスポンスを Task にする
- 4. Androidのヒンジ角度センサに関しての補足
- 5. Android studioに関する質問です。
- 6. Kotlin覚え書き
- 7. adbコマンドによるdozeモード化
- 8. Android StudioでGithub上のプロジェクトをCloneする
- 9. あなたのためのJavaスレッドセーフ
- 10. deeplinkのstateパラメーターについて
- 11. Android11 beta2でヒンジ角度センサが使える様になったので早速試してみた
- 12. Kotlin用Twitter APIラッパー『Penicillin』をAndroidで使う
- 13. 【Kotlin】YouTubeAPIでの動画再生の過程詳細
- 14. ExoPlayerで音声のみ簡単に再生させる方法
- 15. How to use wrap_content with a maximum width?
- 16. TextView上のURLリンクで任意の処理を実行する
- 17. 【動画解説付き】初心者のためのAndroidアプリ開発方法 ~この記事だけ見ればOK~【Android Studio/Kotlin/Windows 10】
- 18. 【Kotlin】YouTubeAPIを用いて動画再生まで行う
- 19. 【Flutter】GoogleDriveへのバックアップ・リストア機能を実装するまでの道のり
- 20. android-samplesのdev-hiltブランチのHiltの実装を読んでみる
Androidアプリから自然言語処理(DialogFlow)
## はじめに
以前、AndroidアプリからDialogFlowを利用して自然言語処理機能を実装しました。
DialogFlowを実装するためのSDKがAndroid用にはなく、結構嵌ったのでメモとして投稿しました。
少しでも参考になれば幸いです。## 全体構成
AndroidアプリからDialogFlowを呼び出すのために、Cloud functionを利用しています。
Cloud functionを挟むことにより、Androidアプリ+DialogFlowとの認証を簡単にしています。![dialogflow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667320/797ef781-b303-6248-2ef0-9fa264023bbf.png)
## 事前準備
– AndroidアプリからCloud functions for Firebaseを利用可能にしておく
– DialogFlowを利用可能にしておく
– DialogFlowのサービスアカウントを発行する## Cloud
ExoPlayerのUI変更方法
以下のように、 ExoPlayer は特別な変更をしなくても良い感じの UI にしてくれるのですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129095/7765e13f-11ce-21c1-5fac-7a9df24ff35c.png)
これらの UI をカスタマイズする事も出来ます。 :upside_down:
# 動画再生UIの変更
ExoPlayer の UI変更 はちょっと特殊で、 `com.google.android.exoplayer2.ui.PlayerView` の `app:player_layout_id` に動画再生画面のレイアウトIDを指定します。
“`xml
“`UI を変更する時は適切な ID や Viewクラ
Xamarin.Forms ガワネイティブアプリで、C# から JavaScript へのリクエスト~レスポンスを Task にする
メモ書きなので雑。
## シナリオ
– Xamarin.Forms + WebView(HTML, JavaScript な SPA) のガワネイティブアプリである
– Android アプリの BACK キーの有効無効を、WebView 内のページ状態によって切り替えたい
– データ編集中(未保存)なので Back キーで history.back やアプリ終了されたら困る、とか## 流れ
1. [Forms側] “Action
> OnRequestIsEnableBackKey { get; set; }“ を生やす 2. [Forms側] WebViewEx(WebViewを拡張したもの)に “Task
IsEnableBackKeyAsync()“ も生やす。実装は次のように。 “`csharp
public TaskIsEnableBackKeyAsync()
{
var comp = new TaskCompletionSource();
Androidのヒンジ角度センサに関しての補足
# はじめに
– [ヒンジ角度センサに関する記事](https://qiita.com/etctaro/items/058aa8495f3457aae34e)をすでに投稿しましたが、いくつか積み残しのタスクがありました。
– ということで、今回は積み残しのそれぞれに対応してみます。# 2番目のヒンジ角度センサの値を取得する
こんな感じで変更を加えました。– Before
“`kotlin
val hingeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
sensorManager.registerListener(this,hingeSensor,SensorManager.SENSOR_DELAY_NORMAL)
“`– After
“`kotlin
val hingeSensors = sensorManager.getSensorList(Sensor.TYPE_HINGE_ANGLE)
for (hingeSensor in hingeSensors) {
sens
Android studioに関する質問です。
自作のandroidアプリを作成しているのですが、アプリを起動しても繰り返し停止しています、と表示され、うまく動きませんLogcatを確認したのですが、以下の通り表示されるのですが、よくわかりません。どうやって修正すればいいでしょうか。
2020-07-10 22:39:52.674 17730-17730/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.fumemo, PID: 17730
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.fumemo/com.example.fumemo.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.content.pm.ApplicationInfo android.content.Context.get
Kotlin覚え書き
#何の記事?
Kotlinでアプリ開発をしていく中で調べたことを備忘録的にまとめる。
※調べる度に追記します#覚え書き
#LinearLayout
・項目をいい感じに並べたい時に使う
・verticalとhorizontalがある【参考】
##layout_weight
・LinearLayoutで項目を横並びにした時にそれぞれの項目の閉める割合を決定する【参考】
https://android.keicode.com/basics/ui-layout-weight.php
adbコマンドによるdozeモード化
Android 6.0からdozeモードが搭載されました。
Android 7.0からはdeep dozeが追加され、dozeにもdeepとlightの2種類存在していることになります。評価する際にdozeモードになるのを待とうとすると時間が掛かってしまうため、adbコマンドでdozeモードにします。
adbコマンドでdozeモードにする場合、2つ方法があります。
1つは通常のdozeモード、もう1つは強制dozeモード(←正式名称ではありません)です。
前者はdozeを解除するトリガーがあるとdozeが解除されますが、
後者はトリガーがあってもずっとdozeのままです。(adbコマンドで解除できますが)### 共通の手順
1.まずはPCにUSB接続して、コマンドで充電をOFFにします
“`
adb shell dumpsys battery unplug
“`2.次に画面を消灯します
### 通常のdozeモード化
1.dozeモードにします
“`
adb shell dumpsys deviceidle step
“`モードが切り替わるため、
Android StudioでGithub上のプロジェクトをCloneする
今回初めてAndroid用のGitHubにあがっているプロジェクトをローカルに落とす必要があったので
自身の備忘録として残しておきます:bow:#環境
Android Studio Version4.4.0
Mac OS Catalina#対象のGitHubリポジトリを開く
Codeボタンを押下すると、”Clone with SSH”というメニューが出てくるので赤線の箇所をコピー
#Android Studioを開く
Get Version Controlを押下
あなたのためのJavaスレッドセーフ## 問
我々は如何にして Java におけるスレッドセーフを保証すべきか。
## 結論
* synchronized ブロックを使いましょう。
* ロックオブジェクトはprivateインスタンスフィールドで定義しましょう。
* ロックオブジェクトはスレッドセーフの保証対象ごとに定義しましょう。## 薀蓄
* スレッドセーフとは
* スレッド間で可変データを共有する場合において、同期化が保証される状態。* 同期化の保証とは
* 「原子性の保証」「可視性の保証」の二点を満たすものと定義する。* 原子性(atomicity)の保証とは
* ある処理の開始から終了までの間、外部からの干渉を排他できること。* 可視性(visibility)の保証とは
* 時系列に対して最新の値が参照できること。## Java言語仕様
Javaにおいては特に以下の制御構文が、これまでに出てきた要素に関連する。
* synchronizedブロック
* 引数に同じオブジェクトを指定したブロック間において、操作を同期化する。
* メソ
deeplinkのstateパラメーターについて
今回はdeeplinkにおけるstateパラメーターのチェックについてお話します。
OAuth周りでstateパラメーターのチェックをすることがあります。
stateについては以下を参照してください。[OAuthやOpenID Connectで使われるstateパラメーターについて]
リダイレクトする際に注意することも多いと思いますが、アプリのdeeplinkでauth_codeとか送る際にも同様のことが言えます。
“`
hoge://success?auth_code=XXX
“`みたいにauth_codeのみdeeplinkで送っていた場合、攻撃者が自分のauth_codeをdeeplinkで送り込んだりできてしまうためです。
そのため、deeplinkでもstateを送り“`
hoge://success?auth_code=XXX&state=YYY
“`アプリ内部で発行したstateと一致することチェックすることで攻撃者が自分のauth_codeをdeeplinkで送る
Android11 beta2でヒンジ角度センサが使える様になったので早速試してみた
# はじめに
– Android11の新しい機能でフォルダブル端末のヒンジ角度のセンサに対応できる様になった、という話があります。
– これまで、エミュレータなどで折りたたみの角度などを変更することはできましたが、センサの値を実際にアプリ側で取得することはできませんでした。
– そんな中、Android11 beta2が2020/7/9(日本時間)にリリースされましたが、早速試してみたところ、無事センサの値がとれましたので、情報を共有します。# 動作環境
– Android Studio 4.2 Canary3 (AS4.0でも影響はないと思われる)
– Android SDK Platform 30 (API Level 30, Revision 2)
– Android 11 beta2イメージ(API Level 30, Revision 6)
– Android Emulator(30.0.20)
– フォルダブルのAVD(7.3_Foldable_API_30, beta2更新前に作成したものでもOK)# 事前準備
– 上記のツール類をSDK Managerなどを使っ
Kotlin用Twitter APIラッパー『Penicillin』をAndroidで使う
# はじめに
Gradleのdependenciesに書くだけでは動かず、かなり面倒だったので忘備録として残しておく。
Androidを触るのは久しぶりなので、違うやり方してるかも。環境
Windows10
Android Studio 4.0
Kotlin 1.3.72
Android SDK Build-Tools 30# Penicillinとは
[Penicillin – Github](https://github.com/StarryBlueSky/Penicillin)
日本の大学生が作っているTwitterラッパー。めちゃくちゃ使いやすい。
クエリを非同期やコールバックで実行できたり、.next()や.untilLast() ひとつでページングが出来る。
Twitterクライアントブームが過ぎてtwitter4jも死んだ今、オレオレTwitterアプリ界に燦然と輝く若き星。# やり方
appモジュールのbuild.gradleを以下のように追記。
バージョンは適宜変更。“`gradle:build.gradle
android {
…
【Kotlin】YouTubeAPIでの動画再生の過程詳細
#はじめに
この記事ではyoutubeAPIに備えられた機能を使えば、動画再生開始時や広告の開始時、動画終了時などに処理を記述できるという事を示します。応用の幅が広いと思うので、ぜひ参考にしてみてください。youtubeAPIを導入して取り敢えず再生させるまでについては、過去に記事を書いているので参考にしてみてください。
【Kotlin】YouTubeAPIを用いて動画再生まで行う:https://qiita.com/K4N4/items/149a11f529810f5ef79e#概要
今回は`PlaybackEventListener`と`PlayerStateChangeListener`というインターフェースを紹介します。これらのインターフェースは動画再生に関わるコールバックメソッドで、動画が開始されたり終了した時に呼び出されるメソッドを定義しています。動画再生イベントもActivityのライフサイクルと同じように、様々な過程を経て再生を行っており、その節々に処理を記述することが出来ます。また、これらは`YouTubePlayer`のネストされたインターフェースです。
ExoPlayerで音声のみ簡単に再生させる方法
## 概要
ExoPlayerは動画・音声再生を便利にするライブラリです
動画プレイヤーを使って再生というサンプルやコード例は多いですが、ボタンを押して音声だけ再生させたいというシンプルな構造をExoPlayerで行うにはどうするかを載せます よりよい方法や間違い・指摘があれば是非ご教授ください
(MediaPlayerでも十分ですが良いライブラリはどんどん使っていきたい)## 導入
“`build.gradle
// android 部分
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}kotlinOptions {
jvmTarget = “1.8”
}
“`“`build.gradle
// dependencies 部分
def exoplayer_version = “2.11.6”
implementation “com.google.android.exoplay
How to use wrap_content with a maximum width?
# How to use wrap_content with a maximum width?
###Androidのレイアウトの問題
wrap_contentのViewに最大幅を設定するにはどうしたらいいか?
![画面サンプル](https://i.stack.imgur.com/TKnp3.png)
↑この例で言えば、吹き出しのところの幅はwrap_contentで内容に合わせて伸縮させたいが、右側の日付の幅を引いた幅を最大値にしたい時。[StackOverflow: How to use wrap_content with a maximum width?](https://stackoverflow.com/questions/32032468/how-to-use-wrap-content-with-a-maximum-width)
吹き出し(TextView)、日付(TextView)をLinearLayoutに入れて、layout_weightをそれぞれ、1と0にする。
![](https://i.stack.imgur.com/6c3HP.png)
TextView上のURLリンクで任意の処理を実行する
# 概要
TextView 上に表示された html のリンクをクリックした際に任意の処理を実行する方法の説明です。※コードからサクッと概要を把握したい方は [こちら](https://qiita.com/beyondseeker/items/690b5d5293d7c9dddc50#-kotlin-%E3%81%AE-extension-%E7%89%88) を見ていただければ瞬殺だと思われます。
## ◆ 背景
TextView では [fromHtml](https://developer.android.com/reference/kotlin/androidx/core/text/HtmlCompat#fromhtml) を用いて HTML を表示することができます。“`kotlin
textView.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT)
“`
しかし、リンク押下時に、ブラウザに表示させる以外の方法を用いたい時もあります。## ◆ 振る舞いを変えたい例
T
【動画解説付き】初心者のためのAndroidアプリ開発方法 ~この記事だけ見ればOK~【Android Studio/Kotlin/Windows 10】
![サムネイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538330/70bfedda-3c3e-f5d4-c3ac-887ad70d07cb.png)
どうも、プログラミングの鬼シヨツ鬼です。
この記事は**「Androidアプリ開発始めたいぜ!だけど初心者だぜ」って人に向けて、この記事だけ見れば、開発に必要なソフトのダウンロードから、サンプルアプリを作って実機で動作させるまでができる**チュートリアル記事です。
初めてアプリ作る人は、この記事を参考にアプリ作りのはじめの一歩を踏み出しちゃってください!ちなみに、この記事は次の動画と同じ内容ですので、記事だけだと分かりづらい部分は、そちらもご活用ください。
**(ボタンの位置や操作方法などがわかるので、初心者の方は動画のほうが分かりやすいかも)**
[【最短最速】初心者のためのAndroidアプリ開発環境構築方法 ~Android Studioのインストールから実機動作確認方法まで~](https://youtu.be/48nyjRfyxLc
【Kotlin】YouTubeAPIを用いて動画再生まで行う
#はじめに
この記事では、youtubeAPIを利用してyoutube動画を再生する方法の基本の基本を書き記しています。このAPIを使うには、GoogleAPI keyが必要になるので各自で準備をお願いします。(入手は無料で簡単です。)#準備
youtubeAPIをAndroid Studioに実装する必要があります。以下のリンクから、YouTube Android Player APIの最新バージョンをダウンロードしてください。
https://developers.google.com/youtube/android/player/downloads/?hl=ja
ダウンロードしたzipファイルを解凍し、android studioのlibsフォルダーに移します。ProjectタブのProjectビューからではないとアクセスしにくいので、注意してください。(Androidビューからでは✖)ポップアップはOKを押して、以下の画像のようになったらOKです。【Flutter】GoogleDriveへのバックアップ・リストア機能を実装するまでの道のり
![トップ2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228439/7356a55f-67ae-8929-5042-ca79983f4a38.jpeg)
7月にFlutter開発を始めてから2作目のメモアプリ「IdeaShuffleMemo」をリリースしました。
■AppStore
https://apps.apple.com/jp/app/id1517535550■Google Play
https://play.google.com/store/apps/details?id=com.IdeaShuffleMemoApp&hl=ja■アプリの詳細記事
3つの機能を実装しようと取り組みました。この記事では、その中のバックアップ機能を実装する方法を書いていきたいと思います。
■パスワードロック機能実装ついてはこちら
https://qiita.com/YuKiO-OO/items/bf2d1d107d1a6
android-samplesのdev-hiltブランチのHiltの実装を読んでみる
Dagger Hiltを使った場合に、まだどのように実装していくのが良いのかよくわかっっていない部分があるので、公式の実装に近そうな、android/architecture-samplesのdev-hiltブランチを読んでいきます。
Dagger Hiltのサンプルとして実用的に見えるものがここに上がっているようなので、参考に見ていきます。
https://github.com/android/architecture-samples/tree/dev-hilt
以下時点のコードになります。
https://github.com/android/architecture-samples/tree/f2fd9ce969a431b20218f3ace38bbb95fd4d1151Dagger Hiltは以下のようなコンポーネントが最初から用意されています。それぞれのコンポーネントにどのようにインスタンスがひもづいているのか見ていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/