- 1. [Android]初めての公式ドキュメント
- 2. AndroidによるmTLS接続方法について自分用メモ
- 3. Pepper SDK入門(28) BaseChatbotで何でも言うことを聞いてくれるPepper
- 4. NDK at ~/Android/Sdk/ndk-bundle did not have asource.properties file と出た時
- 5. 【Android / Kotlin】USB Debuggingモードでアプリ起動を拒否する
- 6. パーミッション管理の「もう一つ」のライブラリ Dexter
- 7. 【AdMob】OpenBidding導入後の効果
- 8. [Android]Handlerの非推奨の解決策&ちょっと理論的な事も
- 9. NoCodeで習慣化しなくていい日記アプリをつくりました
- 10. Google Maps ActivityをFragmentへコピペするときの注意
- 11. RecyclerViewで広告用のレイアウトを設定する
- 12. 【Kotlin 初心者】CustomDialogの作り方
- 13. ストップウォッチ
- 14. 既存のレイアウトの一部にJetpack Composeを組み込む
- 15. 【Android / Kotlin】ズーム対応のPDF表示サンプルアプリ(PdfRenderer + PhotoView)
- 16. Androidでマイクラサーバを動かす
- 17. ThreeTenABPのLocalDateTimeからミリ秒を除外する
- 18. [Android]思考停止で使っていたsetOnClickListener{}を少し掘り下げる
- 19. iPadやAndroidでhostsを書き換えたい時の手軽な代替方法
- 20. 【C#・Android】画面上のタッチ位置の座標取得
[Android]初めての公式ドキュメント
#対象者
ドキュメントを読みたい人
ドキュメントを読もうとしても英語の羅列でなんの情報かが分からないという人
#構成について
みんな大好きAlertDialogのドキュメントを元に解説していきます。https://developer.android.com/reference/android/app/AlertDialog
#AlertDialog
###public class AlertDialog extends Dialog implements DialogInterface
これは、クラスの定義です。
Dialogクラスを継承し、DialogInterfaceを実装していることがわかりますね。###java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialogこれは、継承の家系図的なものがパッケージまで書かれています。
###Known direct subclasses
これは、AlertDialogのサブクラスについて紹介されています。
###A subclass of Dia
AndroidによるmTLS接続方法について自分用メモ
## mTLSとは
ざっくり言うと双方向で行うTLS認証である。詳しくは[こちら](https://milestone-of-se.nesuke.com/nw-basic/tls/mutual-tls-token-binding/)
## 必要なもの
– android側
– クライアントの秘密鍵
– クライアント証明書
– サーバ証明書のルート証明書– サーバ側
– サーバの秘密鍵
– サーバ証明書
– クライアント証明書のルート証明書## 接続方法
1. クライアントの秘密鍵・証明書の生成
生成方法はこちらの記事を参照
– https://tech.at-iroha.jp/?p=734
– https://android.benigumo.com/20201130/keytool/
– https://qiita.com/KNaito/items/66dc67e15b71f2bb1f981. サーバ側の秘密鍵・証明書の生成
AWSやGCPで行うのであれば、
– https://aws.amazon.com/jp/about-a
Pepper SDK入門(28) BaseChatbotで何でも言うことを聞いてくれるPepper
#はじめに
BaseChatbotとは、Chatbotの実装において必ず継承される抽象クラスです。
[Chatbotの回](https://qiita.com/kskrin/items/3f02aa8f55e3e52aac84#qichatbotbasechatbot)でも一瞬だけ触れましたね!
Chatbotでは会話に終始していましたが、Chatbotの親クラスであるBaseChatbotを利用することで発話に限らないリアクション、Pepperの全身を生かしたリアクションも可能になります?以下の動画に登場するPepperは、今回オリジナルで作成するサンプルアプリを使用しています??
【Android / Kotlin】USB Debuggingモードでアプリ起動を拒否する
セキュリティのため、USB Debuggingモードの場合に起動を拒否する必要があり実装しました。
最初に起動するActivity内に記載します。![Screen Shot 2021-05-28 at 9.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429030/1902a36e-c9f9-3bba-477b-3bbd2f39d3f1.png)
“`kotlin
@AndroidEntryPoint
class SomeActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)if (isDebuggingMode()) {
restrictOperation()
}
}
private
パーミッション管理の「もう一つ」のライブラリ Dexter
Androidのランタイムパーミッション周りの処理で使うライブラリといえばPermissionsDispatcherですが、Dexterも使いやすくて便利なので簡単な利用例を交えて紹介します。
###説明
https://github.com/Karumi/Dexter以下公式説明から引用
> Dexterは、実行時に権限を要求するプロセスを簡素化するAndroidライブラリです。
> アクセス許可コードをアクティビティから解放し、そのロジックを好きな場所に記述できるようにします。###例
Dexterオブジェクトを作成し、取得したい権限とランタイムパーミッションでのユーザー操作後の処理を定義します。
下記は画面上のボタンを押した時に位置情報権限(ACCESS_FINE_LOCATION, ACCESS_COURSE_LOCATION)を取得する処理を行うことを想定した例です“`kotlin:
Dexter.withContext(context)
.withPermissions(
Manifest.permission.ACCESS_FINE
【AdMob】OpenBidding導入後の効果
#はじめに
2021年4月からAdMobのOpenBidding機能が一般開発者にも開放されました。
私のアプリにも導入して一定期間経ったのでその効果などを記します。先に書いておくと、多少は効果がありましたが大きく収入が伸びたわけではありません。
まだ導入して2ヶ月程度なのでこの先伸びる可能性はありますが…#OpenBiddingとは
一般的に広告枠には特定の広告配信会社の広告を表示します。
ところがOpenBiddingは複数の広告配信会社に一斉にリクエストを飛ばし、一番高い単価を提示した会社の広告を表示するというものです。
しかもリクエストを飛ばすのはAdMob(Google)側のサーバが担うため、スマホ側への負荷は無くいい事だらけの技術です。
リアルタイムオークションと言ったほうが伝わりやすいかもしれません。
日本語では「公開入札」と呼んだりします。なお、各広告配信会社とは個別に契約する必要があります。(契約といってもユーザ登録+αレベル)
また、一部の広告配信会社はアプリにSDKを組み込む必要があります。
SDKが出てくると難しく感じるかもしれませんが、想像して
[Android]Handlerの非推奨の解決策&ちょっと理論的な事も
#非推奨になっちゃうやーつ
“`kotlin:
const val DELAY_TIME = 1000fun delayDelay() {
Handler().postDelayed({
// 遅延させたい処理
}, DELAY_TIME)
}
“`
正しくは“`kotlin
Handler((Looper.getMainLooper())
“`
Handlerの引数を指定してあげてください。
#なんで?
ついでに、Handlerについて理論的な事を少しだけ喋ります。登場人物が多いですが、こう例えてください。
Handler =「トラック」
Message Runnable =「荷物」
Looper =「工場」
Queue =「先入れ先出し」
Message Queue =「ベルトコンベアー」Androidのメインスレッド(UIスレッドと同じ)には、工場(Looper)が元々あります。
そして、工場内にはMessage Queueという「ベルトコンベアー」があります。
ベルトコンベアーは、Queue
NoCodeで習慣化しなくていい日記アプリをつくりました
![noteサムネ_flour告知.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/127251/a47cd97b-a7e4-da9f-aeff-90a48a39123a.png)
こんにちは。フローリシング代表の中沢草太です。
普段メンタルヘルスのアプリを作っていて新しいアプリを公開したので紹介します。
このアプリはNoCodeのKodularを用いて開発しています。#何を作ったのか?
習慣化しなくていい日記アプリ「[flour](https://play.google.com/store/apps/details?id=jp.flourishing.flour&hl=jp)」を作りました。
(日本語と英語に対応しています)https://play.google.com/store/apps/details?id=jp.flourishing.flour&hl=jp
なんで習慣化しなくていいのかというと**Twitterをしながら日記を書くことができるから**です。
Twitterし
Google Maps ActivityをFragmentへコピペするときの注意
少しハマったのでメモ
# やろうとしたこと
– Google Maps Activity のコードをそのまま新規FragmentにコピペしてMap表示するFragmentとして使う![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344513/e91a2588-bfb6-8ef5-631d-49ba68a3ed46.png)
# ハマったこと
– “Unresolved reference: supportFragmentManager” というエラーが出る# 対策
– supportFragmentManager から childFragmentManager に変更対策前
“`kotlin:Fragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
RecyclerViewで広告用のレイアウトを設定する
#目的
RecyclerView内に広告(バナー広告を想定)を掲載する際、広告用のレイアウトを設定する方法がLayoutManagerによって異なったため、それぞれのLayoutManagerでの設定方法のメモ#前提
RecyclerView.AdapterのgetItemCountは広告の枠も含めた件数を返し、getItemViewTypeで該当する位置が通常のアイテムか広告か判断出来るようになっているものとします。#LinearLayoutManager
AdapterのonCreateViewHolderとonBindViewHolderでViewTypeごとの処理に振り分けるだけ。“`java
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE_ADS) {
// 広告用のViewHolderを返す
} else {
// 通常のViewH
【Kotlin 初心者】CustomDialogの作り方
ダイアログをオリジナルのデザインで使いたい時に必要になるのがこのCustomDialogになります。
### デフォルトのDialogのイメージ
| デフォルトのDialog | オリジナルのDialog |
|——–| ——|
| | |### 作り方
“`MainActivity.kt
package com.example.myapplicationimport android.os.Bundle
import android.w
ストップウォッチ
activity_main.xml
“`
既存のレイアウトの一部にJetpack Composeを組み込む
#はじめに
Google I/O 2021でアナウンスされたように、今後Jetpack ComposeでUIを組み込んでいくのが推奨されていくようです。
そこで、本記事では既存のアプリにJetpack Composeを組み込む方法を説明します。#既存のアプリにJetpack Composeを組み込む
###レイアウト
レイアウトファイルの一部でComposeを使う時の例です。“`xml
【Android / Kotlin】ズーム対応のPDF表示サンプルアプリ(PdfRenderer + PhotoView)
# はじめに
今回 Android でPDFを表示するためにはどのように実装する必要があるかを調査、検討しました。結論、Android でPDF表示をするのはかなり大変。
というかただ表示するだけであればそこまで難しくはないものの、使い勝手をよくするためにいろいろな機能を実装したりするとなると相当大変そうです。(というかそもそも可能か?ということもあります。)iOS のようには行かないみたいです。
Android 大変や…こんな意見もあって、参考にさせていただきました。
https://qiita.com/s_of_p/items/1c1a467d246ab7dc45e1そこで今回は
– PDFを1枚だけ表示(標準SDKの[PdfRenderer](https://developer.android.com/reference/kotlin/android/graphics/pdf/PdfRenderer)を利用)
– ズームイン / ズームアウトに対応(ライブラリ[PhotoView](https://github.com/Baseflow/PhotoView)を利
Androidでマイクラサーバを動かす
#きっかけ
最近マイクラ鯖をDockerコンテナ上とかラズパイ上に立てて遊んでいて、ふとスマホでも Javaが動けばいけるのでは、と思った#大まかな流れ
1. Termuxアプリ上にUbuntuをインストール
2. Javaをインストール
3. マイクラのサーバプログラムを動かす#検証環境
* 端末 : [Xiaomi Redmi 9T](https://www.mi.com/jp/redmi-9t)
* [Termux](https://play.google.com/store/apps/details?id=com.termux&hl=ja)バージョン : 0.101#Ubuntuのインストール
[こちらの記事を参考にしました](https://qiita.com/v2okimochi/items/89eb26a8c69105914604)###必要になるツールのインストール
“`bash
apt update
apt install -y wget proot git
“`###`ubuntu-in-termux`をcloneしてくる
“`bash
ThreeTenABPのLocalDateTimeからミリ秒を除外する
“`build.gradle
dependencies {
…
def threeTenAbpVersion = ‘1.3.0’
implementation “com.jakewharton.threetenabp:threetenabp:$threeTenAbpVersion”
}
“`“`MainActivity.kt
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.jakewharton.threetenabp.AndroidThreeTen
import org.threeten.bp.LocalDateTime
import org.threeten.bp.OffsetDateTime
import org.threeten.bp.format.DateTimeFormatter
import org.threeten.bp.temporal.ChronoU
[Android]思考停止で使っていたsetOnClickListener{}を少し掘り下げる
#ボタンをポチポチ
どうもReoです。
Buttonをタップした時に、何かの処理をした時に、取り敢えず“`kotlin
buttonView.setOnClickListener {
// 何かしらの処理を書く
}
“`
こんな感じで当たり前のように使っていました。
しかし、最近これの拡張関数を作る時にググって参考にしたメソッドがあるのですが、それが理解できない。
何故なら、リスナーがどう成り立っているのか分からなかったから。さて、こいつを脳死で使っていたことが判明したので、掘り下げたいと思います。
#裏のコード旅へ!
適当にButtonViewを追加して、MainActivityとかからViewを呼び出して、setOnClickListenerを実装してください。
裏のコード見るには、リスナーメソッドにカーソルを合わせてWindowsの方はCtrl + Enter。
Macの方は、Command + Enterです。こんなコードに飛んだかと思います。
“`kotlin:View.java
public void setOnClickListener
iPadやAndroidでhostsを書き換えたい時の手軽な代替方法
## はじめに
実際に iPadやAndroidのhostsを直接書き換える方法、ではありません。
この質問が出る時に使える代替方法の話です。##ドメイン名の名前解決とは?
例えば、ブラウザに https://yahoo.co.jp と入れてエンターを押すと、Yahooのホームページが表示されます。
それは、
1)yahoo.co.jp というドメイン名が登録されている
2)世界中から、”yahoo.co.jp” を調べて、IPアドレスに変換(DNSによる名前解決)
3)ブラウザは、そのIPアドレスにアクセスしてページの情報をもらって表示する
という一連の作業が連携して行われているからです。参考例:
![powershell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114744/43032efd-2f85-fa5d-3ba0-6787ed2133b2.png)実際の開発の現場では、「まだ世界に公開されていないドメイン名だが、今だけ、自分のマシンの中でだけ名前解決させたい」というニーズが
【C#・Android】画面上のタッチ位置の座標取得
C#でandroid用のコードを書く時のメモです。
javaで書く時とほぼ同じですが、微妙に違います。##コード
違う点は、javaだと`override`の書き方が違う点と、`OnTouchEvent()`の先頭が小文字である点です。“`c#
public class MainActivity : AppCompatActivity {
protected override void OnCreate(Bundle savedInstanceState)
{
// 省略
}///
画面タッチ時の処理 public override bool OnTouchEvent(MotionEvent e)
{
System.Diagnostics.Debug.WriteLine(“X座標->” + e.GetX() + “,Y座標->” + e.GetY());
return