android-apt で アノテーションを便利に

このプラグインを追加すると、gradle のソースフォルダとして認識される場所に Butter Knife で生成されるコードが格納されます。
そのため、Butter Knife で生成されたクラスも Lint から見えるようになり、Lint が怒らなくなります。やったー。

Y.A.M の 雑記帳: Butter Knife のフィールドやメソッドが Lint に Unused declaration と言われないようにする方法

JakeWharton commented on Sep 26
If you use the android-apt plugin then Android Studio can see the generated code and the method will not show up as unused.

Lint: Unused resource · Issue #356 · JakeWharton/butterknife

Bitbucket で公開されています.

The android-apt plugin assists in working with annotation processors in combination with Android Studio. It has two purposes:
Allow to configure a compile time only annotation processor as a dependency, not including the artifact in the final APK or library
Set up the source paths so that code that is generated from the annotation processor is correctly picked up by Android Studio.

hvisser / android-apt — Bitbucket

「APT」て何?

Annotation Processing Boilerplate Destruction (Droidcon NYC 2014) // Speaker Deck

Butter Knife 以外にも使えるのか.

わーい.


【急げ!!】Chromecast ユーザーにまたもや 無料クーポン配布中!!

現在配布中です.

日本では, 映画1本とNetflixの1ヶ月無料が特典のようです.

Chromecast Offers

Chromecast

Chromecast 2

あれ, テレビをONにして再度.

Chromecast 3

映画_を1_本プレゼント_-_Google_Play_の映画

パソコンのブラウザChromeからでないと無理なのかも.

いつもありがとうございます.


【2015-10-14 公開!!】Google I/O 2015 のソースコードに見るディレクトリ構成

d2f9b090-727a-11e5-96aa-b92347fe83f2

半年くらい遅れていましたが公開されている.

Oct 14, 2015, 5:41 PM GMT+9
Initial source posted. We'll be iterating on it a bit going forward. As always we welcome contributions.

PaulRashidi

I/O 2015 Source Code · Issue #139 · google/iosched

google_iosched

google/iosched

Androidアプリコード部分の基本的なディレクトリ/ファイル (モジュール/クラス) の構成をみる.

iosched/android/src/main/java/com/google/samples/apps/iosched/

機能別 (供用)

AppApplication.java
Config.java

provider/*Contract.java
provider/*Enum.java
provider/*Provider.java
provider/*Database.java (extends SQLOpenHelper)

receiver/*Receiver.java
service/*Service.java
util/*Utils.java

io/model/*.java
io/*Handler.java (extends JSONHandler)
io/JSONHandler.java

ui/BaseActivity.java

画面別

*/*Constants.java

*/*Activity.java
*/*Fragment.java
*/*View.java

*/*Adapter.java

*/*Helper.java
*/*Utils.java

*/data/*Data.java
*/*Model.java (interface)

直感的に分かりやすく整理されています.

ソースディレクトリの構成時にもっておくべき「会社別」のイメージ


消してしまった不要な通知を2度とこないように「通知履歴」から非表示設定する

朝起きたら

ふと気がついたら

どうでもいい通知が通知バーに満載.

screenshot-1445071325811

通知バーを開いてこれらを削除.

「通知をさせないように設定できる」ことはなんとなく知っているけど, なんだか面倒くさい.

などと思いつつ今日も何回も通知たちを削除する.

screenshot-1445071325811

なんだろうな, この毎度の無駄な動作.

通知の設定画面はいくつもある

設定が複雑な雰囲気がしてなんとなく設定することがおっくうになる.

例えば Twitter アプリからの通知表示を設定する場合, 以下の3つの画面から設定非表示にできる.

1. アプリの設定画面

通知を表示しているアプリを開いてそのアプリ内の詳細な設定画面で非表示にする.

20151017-100353

2. 設定の「アプリの通知」

Android(OS)自体の「設定」から.

「設定」-「通知」-「アプリの通知」-(通知しているアプリを選択)

20151017-100546

3. アプリ情報の画面

これも Android(OS)自体の「設定」.

「設定」-「アプリ」- (通知しているアプリを選択)

20151017-100635

それぞれの画面を見比べてみると, 「通知の設定」内の項目はいくつもあって, 画面によって項目が違う.

どのアプリが通知を表示していたのかわからない

通知のメッセージやアイコンを見てもどのアプリか分からないことがある.

タップするとPlayストアの見たこともないアプリのインストール画面が開くというインストールの勧誘. ブラウザが開いてサイトへの誘導もあったり.

普通にタップすると通知は消えてしまう.

通知を表示しているアプリ の特定ができないと通知の非表示設定はできない.

表示されている通知を長押しすると

表示されている通知を長押しで表示される i ボタンをタップでも 2.設定の「アプリの通知画面」を表示できる.

20151017-101731 3

ベルマークをタップすると 「通知のフィルタリング」画面へ記録されてアプリ名と通知の内容は残すことができる.

「設定」-「通知」-「通知のフィルタリング」

20151017-101731 2

が, めんどくさいのか, イラッとしてなのか, すぐに通知を消してしまう.

そして, また表示されることになる.

設定ウィジェットの「通知ログ」を使う

アプリをインストールする必要はありません.

設定項目別の「通知ログウィジェット」をホームに置いておきます.

20151017-100000

20151017-100027

20151017-100055

20151017-100109

タップすると, 通知を表示したアプリの履歴を最近順に見ることができます.

20151017-103438

消したい通知を見つけてタップすれば 3.アプリ情報の画面 が表示されるので「通知を表示」のチェックボックスをOFFにします.

20151017-100635

これなら通知を消したあとでも, かんたんに「アプリの特定」と「通知をOFF」を行うことができます.

通知が表示されない とかどうせブロックの設定だろ! → 原因「フィルター」


強力なスキーム「android-app://」でサイト内リンクのクリックからIntentを自在に投げる

例えば, YouTubeのURLがあって,

http://www.youtube.com/watch?v=dQw4w9WgXcQ

WEBブラウザ向けにリンクを貼る場合

<a href="http://www.youtube.com/watch?v=dQw4w9WgXcQ">→ Go Movie</a>

と書く.

→ Go Movie

Android端末上では, これをクリックするとデフォルトのアプリ設定がされてない場合は暗黙的インテントが発行されて,

1. 該当アプリ選択ダイアログ

のあと,

2-a. ブラウザでYouTubeサイトの動画が表示される.
2-b. YouTubeアプリで動画が表示される.

となる.

ブラウザアプリとYouTubeアプリをインストールはほとんどの人ががインストールしているだろう.

20151015-083102

20151015-083210

そのリンク記述を

android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]

の書式で書く. 書式内 {package_id} は必須.

<a href="android-app://com.google.android.youtube/http/www.youtube.com/watch?v=dQw4w9WgXcQ">→ Go Movie from android-app</a>

これをクリックすると, YouTubeアプリに対して明示的インテントが発行されて, 該当する動画が表示される.

→ Go Movie from android-app

これは以下をセットした明示的インテントを投げるのと等価.

Action:	 ACTION_VIEW
Data:    http://www.youtube.com/watch?v=dQw4w9WgXcQ
Package: com.google.android.youtube

もし YouTube アプリをインストールしていない場合は PlayStoreアプリが起動してYouTubeアプリの画面が表示されてそのままインストールすることができる.

20151015-084402

この書式を使うと

「該当アプリの選択」
「アプリのデフォルトの設定のクリア」

というユーザからみて煩わしい動作がなくなる上, 明示的インテントの

「該当するパッケージがみつからない」

という場合に対しての開発側の手間も省ける.

書式にあるようにこんな記述も可能.

<a href="android-app://com.example.app/
  #Intent;action=com.example.MY_ACTION;
  i.some_int=100;S.some_str=hello;end">...

これは以下明示的インンテントと等価.

Action:	 com.example.MY_ACTION
Package: com.example.app
Extras:	 some_int=(int)100
         some_str=(String)hello

便利だが, いつからこんなのあったんだ?

スキームはスキームなのかっ!?

注意: ブラウザ互換

Intent | Android Developers

Cross Reference: ../Intent.java