サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
qiita.com/KeithYokoma
See also, iOS での対応方法はこちらを参照: https://qiita.com/nwatabou/items/6a0c891ff3f206cdb8e9 ことのはじまり 先月にアナウンスがあり、つい先日正式に Callback URL のホワイトリスト化が強制となりました。 これに伴って、今まで適当に Callback URL を設定していたり何も設定せずにいても動いていたものが動かなくなります。 正しく設定しないとどうなるか 正しく設定していないアプリで TwitterKit for Android を使うと、Twitter 公式アプリがない状態で認証・認可のフローにはいるとCallback URL not approvedというようなエラーが403で返ってきます(Twitter 公式アプリがインストールされている場合はそちらが認証・認可のフローを担うため問題なく動作します)
概要 何やら哲学的なタイトルですが、最近とある SDK で例外っぽい名前の例外でないクラスを見かけたので、頼むからそれは例外にしてくれ🙏という気持ちをここに記しておこうと思います。 例外のような名前の例外でないクラス ある有名なライブラリにも昔は存在したのですが、非同期処理中におけるエラーを説明するためにFooErrorというクラスを作り(以後この記事では便宜的にエラークラスと言います)、そこにステータスコードやメッセージを詰め込んでコールバックする設計のライブラリや SDK が稀によくあります。 言語によっては例外処理の機構が言語レベルで用意されていないものもあるので、一概にこれがどの場合でも悪手だとは言えませんが、少なくとも例外処理の機構を持っている言語では、例外的状態を説明するのに例外を積極的に使って欲しいです。あるいは、どうしてもやむを得ない理由で例外が使えない場合や、正常系とし
リフレクションとは リフレクションとは Java の標準ライブラリに含まれている、クラスのメタ情報を取り扱うための API 群で、java.lang.reflectパッケージにまとめられています。 リフレクションを使うことで、クラスに定義されているコンストラクタやメソッド、フィールドの一覧を読み取ったり、そこからメソッドを呼び出したりフィールドの値を取り出したりということができます。通常であれば、リフレクションを使わずとも直接インスタンスを作ってメソッドを呼び出す手続きで事足りますが、リフレクションでは不可視なメソッドにアクセスしたり、finalなフィールドを変更したりというチート技ができるようになります。 リフレクションでできること すべての型には、.classというリテラルがあります。String.classとすると、Stringクラスに関する情報を持ったClassクラスが得られます。
特別なパーミッションとは Android にはパーミッションと呼ばれる仕組みによって、アプリがユーザの許可無くプライベートなデータやセンサ類などにアクセスできないようになっています。Lollipop まではストアでのインストールと同時に許可を与えるフローでしたが、Marshmallow 以後は Runtime Permission という仕組みが導入され、アプリを起動してからユーザに許可を求めるフローへと変わりました。 さてこの記事では、その Runtime Permission のフローとは更に別なフローを経なければ許可ができない特別なパーミッションについてまとめます。この特別なパーミッションに対する許可を得るには、ユーザを然るべき画面へ遷移させ、システムの設定画面をつかった許可フローへナビゲートする必要があります。Runtime Permission ではダイアログが表示されましたが、
Kotlin、盛り上がってますよね。新しいプロジェクトを作るなら Kotlin したいんですが、既存プロジェクトでも Kotlin をしたい気持ちもあるでしょう。しかし、大きくなった既存プロジェクトにいきなり Kotlin を導入するのも骨が折れます。そこで今回は、大きなプロジェクトでもちょっとずつ Kotlin が始められるよう、まずはテストコードから Kotlin をしてみる最短ステップをここに残しておこうと思います。 現在の構成 弊社の Android アプリのコードは Java でできています。テストコードは Robolectric 3.1.2 で、IDE は AndroidStudio 2.2 です。IntelliJ Plugin の Kotlin Plugin も入っています。 構成管理 プロジェクトのルートにあるbuild.gradleに、Kotlin のプラグインを追加しま
前置き Wercker は Docker コンテナの中で CI をするサービスで、とりあえずビルドに必要な環境が整った Docker イメージがあれば、あとは Wercker が勝手にイメージを引っ張ってきてコンテナを立ち上げて指示通りビルドをしてくれるため、公式ドキュメントにはない Android アプリのビルドも可能です。 ビルドに必要な環境はすべて Docker イメージにまとめて放り込んでしまえるので、SDK の更新があったときに CI サービス側の対応を待たなくとも、自分でイメージを作り直すだけで環境を最新に保つことができる点が魅力ですが、裏を返せば自分で環境をメンテナンスしなくてはならないという面倒臭さがあります。 とは言え、CI サービス側が環境を用意してくれる場合でも、自分で環境をメンテナンスする場合でも、環境が新しくなってもビルドが壊れないことの確認は最低限する必要がある
Android 7.1 Nougat MR1 は現在ベータプログラム参加者向けに Developer Preview として配布されています。あくまでプレビュー版ですので挙動は今後変更されることもありますが、ぱっとさわってみたところ、しれっと大事なところの動きが変わっていたのでスクリーンショットとともに記録しておきます。 Android 7.0 Nougat までは、横画面にしたときの Back, Home, Recent は常に画面右側に配置されていました。 この配置が Android 7.1.1 Nougat MR1 では、向きによって変わります。 端末を右に倒すと左側に。 端末を左に倒すと右側に。 もし WindowManager で他のアプリに重ねて View を表示する機能がある場合、この Back, Home, Recent の領域に View を描画することができます。 ちな
OpenSTF とは OpenSTF とは、OSS で開発が進められている Android 端末をブラウザで操作・管理するためのパッケージです。 OpenSTF を立ち上げたサーバに各種 Android 端末(ハンドセット端末、ウェア端末など)を接続することで、OpenSTF を介してリモートから端末の操作やデバッガのアタッチなど、テストに必要なあれこれが利用できるようになります。 OpenSTF サーバを作ろう 今回は、自宅等の環境で OpenSTF サーバを作ることを前提に考えます。 Ubuntu で OpenSTF を構築する場合は、Ubuntu 14.04 LTS 上での手順に従いますが、Ubuntu 16.04 LTS 上でも問題なく動作します。 環境が整ったら、以下のように OpenSTF をインストールします。
概要 前回のアップデートから一ヶ月ほど経ちましたが、しれっと Robolectric 3.1.1 がリリースされています。今回の差分は ウェブ上でも確認できるほどのサイズですが、例によって破壊的変更が入っていますので、バージョン番号を上げるだけでは動かない場合があります。 RobolectricGradleTestRunner は deprecated 代わりに、RobolectricTestRunnerを使いましょう。 DefaultPackageManager のコンストラクタ 以前はShadowsAdapterのインスタンスを渡していましたが、3.1.1 からResourceLoaderを渡すように変更されました。 ResourceLoaderはRuntimeEnvironmentが提供しているものを使用できます。 よって、次のように変更をする必要があります。 // 3.1 まで D
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
(注:弁当とブリトーのメタファーは、Twitter の Israel Ferrer さんが提唱しているものです。) 弁当、ブリトー。それらの概要 弁当と言えば、箱のなかに様々なおかずがつめ込まれた日本の伝統的な携行食です。そしてブリトーと言えば、トルティーヤと呼ばれる薄い小麦粉の生地の中に、様々なおかずがつめ込まれたメキシコの伝統的な料理です。どちらも、小さな箱かトルティーヤかの違いはあるものの、それらの中に様々なおかずがつめ込まれたものであることには変わりありませんが、そのおかずのつめ込まれ方には明確な違いがあります。 弁当、ブリトー。それらの違い 弁当には仕切りがあります。この仕切りの中におかずを詰め込んでいくことで弁当が完成しますが、この仕切りは時に自由に配置することができ、好みのおかずのために場所を広くとることができます。そして何より、仕切りがあることで異なるおかず同士味が混ざり合
概要 もう随分と前に TravisCI から CircleCI へ乗り換えたのですが、いかんせん、便利な CircleCI をもってしても Android のプロジェクトのビルド時間は長くなり続け、ついに 1 回のビルドに 20 分を費やすほどにまで成長してしまいました。いくつか無駄を省いたり、キャッシュをしてみたりと言った策を講じたものの、目立った改善が得られませんでした。そこで CircleCI を脱却してみることにしました。現在、CircleCI を脱却し Wercker を利用することで 1 回のビルドが 5 分ほどで終わるようになりました。この記事には、何がどのようにして短時間で済むようになったかを書き記してあります。 問題の根源 そもそも CircleCI で時間がかかっている部分はどこかというところから見ていきます。現在のプロジェクトで使用している分には、以下に上げる部分でか
概要 DroidKaigi 公式アプリ誕生のお話は @konifar さんのブログ記事 を御覧ください。 この記事では、DroidKaigi 公式アプリの中でも、自分がプルリクエストを出した、NavigationView の操作とそれに連なる部分の構造について解説します。 NavigationView のイベントハンドリング NavigationView に表示するメニューの各項目は、従来の OptionsMenu などと同じMenuItemです。そのMenuItemが選択されたタイミングのイベントを拾うコールバックとして、NavigationView.OnNavigationItemSelectedListenerがあり、DroidKaigi アプリの場合はMainActivityがこれを実装しています。 当初、NavigationView.OnNavigationItemSelecte
以前の投稿(イマドキなイカした Android のオープンソースライブラリ集)から一年以上経過し、様々なライブラリが継続して開発されている中、どんどん便利なものが増えてきていますので、改めてそれらを纏めて見てみたいと思います。 プログラミング・パラダイムに関するもの Dagger2 Google が公式に Square, Inc. の Dagger をフォークし、リフレクションを排してパフォーマンスを上げたもの。より静的に DI をする方向に持って行っています。 RxJava リアクティブプログラミングを Java に持ち込むためのライブラリ。 デバッグ用途に使うもの u2020 デバッグ時に便利な各種のパラメータを NavigationDrawer に詰め込んで、デバッグビルドのアプリで操作できるようにすることで、様々な環境下でのテストが簡単になります。通信周りは、強制的にエラーを発生さ
デバッグ中、何か良からぬ挙動を発見した時に、怪しげなオブジェクトの持っている状態がどうなっているかを調べる場合において、デバッガをアタッチして調べることが困難なことがあります。例えば、その怪しい挙動に再現性のない場合を考えてみると、再度同じ挙動を起こすまでに膨大な時間が必要になるかもしれません。そもそも、どこが悪いのかも分からないのに無闇にデバッガをアタッチしていては、検証にかかる時間が無駄に伸びてしまう可能性もあります。 この記事では、怪しい挙動を発見した瞬間に、デバッガに頼らずともオブジェクトの持っている状態がどうなっているかを調べたい人のための手順をまとめます。 AndroidStudio でヒープダンプを取る AndroidStudio には、それぞれのプロセスがどのくらいメモリや CPU、GPU のリソースを消費しているかを可視化してくれるツールが組み込まれています。普段 Log
TL;DR 夜などの暗闇でスマートフォンを使うときには、目に優しい色使いをしましょう これ is 何 夜な夜なスマートフォンの画面を注視していると、画面の明るさに目が馴染んでしまって、くらいところで周りが見えなくなった体験は無いでしょうか。あるいは、夜車を運転している時にスマートフォンの画面をつけていると、その光がチラチラと視界に入ってきて鬱陶しく感じることはないでしょうか。 この記事では、画面の輝度を変更する方法ではない、暗所でもユーザの目に負担とならないような UI の作り方を見ていきます。 目に優しい色 色の属性 色にも明るさがあります。 HSVモデルやHSL色空間、HSB色空間といったモデルで表される色のプロパティには、V(Value)やL(Lightness)、B(Brightness)といった、明度や輝度と呼ばれる明るさを示すスケールがあります。この値が高いほど色は明るく見え、
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? ダイアログは、ユーザとの対話の中でも特に「確認」や「注意」を促すために用いられる UI コンポーネントの一つです。二択あるいは三択の項目を配置して、YES/NO や OK/Cancel などのインタラクションを用意することで、ユーザとの対話をすることが出来ます。あるいは、単に現在の状態を表示(読込中など)し、その他の各種操作をブロックすることで、待つ必要が有ることを明示することも出来ます。 一方で、ダイアログはその表示が画面の前面に大きく表示され、時にダイアログ以外へのインタラクションを禁じる場合もあることから、使いどころを間違うと非常
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? これは何? この記事では、Qiitaに限らず様々な場面でノウハウやTipsを共有するときに役立つノウハウ・Tipsを紹介します。記事を分かりやすくまとめ、課題の解決を望む人たちにダイレクトに届く記事を仕上げるための一助となれば幸いです。 表明しておくとよいこと 記事を書く上では何かしらのコンテンツがあるはずですが、そのコンテンツが一体何なのかを説明しておくと、読む人がスムーズに話題を理解できるようになります。 前提を明らかにしておく 共有したいノウハウやTipsがどんなときに役立つかという情報は非常に重要なものです。問題が再現する環境、
この記事は、先日の potatotips #22 では説明しきれなかった部分を補足するものです。potatotips #22 でのスライドは Regular Expression in Android And Java です。 おさらい Pattern | Android Developers Java の正規表現 Patternクラスを用いて、正規表現文字列をコンパイルしてマッチする処理を描くことになります。Stringクラスには一部便利なメソッドがあり、正規表現文字列を渡してマッチするものに処理を施す事ができるようになっていますが、あまり複雑なことはできないため、Stringクラスで提供されている以上のことをする場合はPatternクラスを用います。 Java の正規表現は Perl5 のシンタックスのサブセットですが、Perl のように正規表現リテラルは存在せず、文字列を用いて正規表
クラス名には、多くの場合"名詞"を用います。メソッド名の場合は動詞や助動詞を用いて命名しましたが、クラス名は何かしらの責務を持つモノとして捉えるため、名詞を用いることになります。 一方、インタフェースの宣言をする場合、そのインタフェースの名前に"形容詞"を用いることがあります(例:Iterable、Closeable等)。形容詞を用いることで、クラスの持つ性質を説明的に見ることができるようになります(Iterableな配列のList実装 -> ArrayList等)。 この記事は、どのような名詞や形容詞がクラス名やインタフェース名として用いることが出来るかを一覧し、できるだけクラスやインタフェースの役目を端的に表せるようなリファレンスとして活用できるものを目指していきたいと思います。 自分自身がクライアントアプリケーションのバックグラウンドを持っている為、多分にそこで用いる命名方法が含まれ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 端末で音楽を再生したり、音を鳴らしたり、音量を調整したり、音に関連する制御は、android.media.AudioManager が持っています。 このクラスは、Context#getSystemService(String)経由で取得することができるので、Contextがのある場所でこのクラスを使うことができます。 このクラスを使うにあたっては、いくつかの用語を整理しておく必要があります。 用語の整理 ストリーム 音は、特定のストリーム上に流し込まれ、最終的にスピーカーの出力に変換されます。この時、例えば、音楽と通知の音が同時に流れ
原文は「 https://github.com/bither/bither-android-lib/blob/master/REASON.md 」 なぜ iPhone の画像は Android の画像よりもずっと高品質なのか Android と iPhone との比較は多くの点で議論されており、どちらがより良いかは、Android の画像の質は iPhone とくらべてずっと劣るという点を除けば、未だ結論が出ていません。Facebook、Twitter、Instagram 等どれを使っていても、写真をとって、フィルタをかけて、ソーシャルネットワーク上に公開すると、いつも Android から投稿される写真は画質が劣化しています。しかし何故でしょう? 私達は昨年の間調査をし、そしてついに、Google が犯したほんのちょっとしたミスが原因であることを突き止めました。それは本当にちょっとしたミ
新しいメディアコントロール API 日本語が不自由なタイトルのように思えて仕方がありませんが、Lollipop になって以降、メディア(オーディオやビデオなど)コントロールに関して API が刷新されました。 主な新しい API は以下のとおりです。 MediaSession MediaController MediaBrowser Notification.MediaStyle これにともなって、いくつかの API が @Deprecated となっています。 RemoteControlClient RemoteController @Deprecated となった API は、新しいバージョンでは自動的に新しい API を使うような動作になるため、置き換えるコストは低いようですが、一部機能的に廃止されたもの(ロックスクリーン上での再生コントロール等)もありますので、順次移行していく必要
RemoteViews の内部構造 AppWidget や Notification のカスタム View に用いられる RemoteViews は、実際のところ View そのものは内包しておらず、View に関する情報(レイアウトのリソース ID やホストアプリケーションの情報など)と、View の操作を説明する情報を保持しています。 たとえば、RemoteViews を使って TextView に文字列をセットする場合、内部では、「setTextを指定された引数で呼び出す」という情報が RemoteViews の中に記録されます。この操作に関する情報はリスト形式ですべて RemoteViews の中に記録されており、RemoteViews#apply()を呼び出すことでそれらが実行され、View が展開されるという仕組みになっています。 RemoteViews でのイベントハンドリン
ButterKnife、便利ですよね。Activity が沢山のなんちゃら Listener を implements しなくても、アノテーションを付けるだけでその辺を勝手によしなにしてくれますし、findViewById の手間も @InjectView で解決できます。 さて、ListViewにはOnItemClickListenerという、ListViewの中のアイテムをクリックした時のハンドラがあります。 ButterKnife を用いると、以下のようにサクッと書くことが出来るようになりますね。 public class ListViewActivity extends Activity { @InjectView(R.id.listview) ListView listview; @Override protected void onCreate(Bundle savedInst
この投稿は DroidKaigi で話そうと思ったけど採択されなかった RejectedKaigi な内容です。 プログラムは、書けば書くほど複雑になります。行数が増え、分岐や繰り返しが増え、メソッドが増え、クラスが増え、パッケージが増え、管理するものは日に日に増えていきます。これらのものを使う側からすると、使うものが増えるということは、それだけ覚えることが増えることになります。勿論、IDE やエディタプラグインによって、そのような労力が極力減らされることもありますが、覚えることが少ないに越したことはありません。 この記事では、IDE やエディタプラグインはひとまず脇に置き、チームでコミュニケーションを取りながらコードを書くという観点で、従来のプログラミングのプラクティスを基に、開発時のミスを少なくし、チームで素早くアプリを作り続けていく方法論を深めていこうと思います。 Agenda 型を
次のページ
このページを最初にブックマークしてみませんか?
『@KeithYokomaのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く