強力なスキーム「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


今ではToolbar記述は不要となっていました とさ

昔々, こんな記述がありました.

...
dependencies {
    compile "com.android.support:appcompat-v7:21.0.+"
}
...
...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.myawesometoolbar);
    setSupportActionBar(toolbar);
}
...
...
<android.support.v7.widget.Toolbar
    android:id=”@+id/my_awesome_toolbar”
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent”
    android:minHeight=”?attr/actionBarSize”
    android:background=”?attr/colorPrimary” />
...

AppCompat v21 — Lollipop 搭載前のデバイスにマテリアル デザインを! - Google Developer Japan Blog

旧ActionBarを隠したりとか, そんなテーマのとか, メニューのとか, 面倒でしたが今ではもうこの記述不要なのですね.

以下, Android Studio で BlankActivity をGUIから作成. API23.

...
dependencies {
    ...
    compile 'com.android.support:appcompat-v7:23.0.1'
}
...
...
public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
}
...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
...
>
    <TextView
        android:text="Hello World!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>

KITKATでもLOLLIPOPでもきちんと表示されます.
Android_Device_Monitor 2

Android_Device_Monitor

テーマは, 非NoActionBarを親にして色を設定.

...
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
...

前の記述のままでも動いてしまうのですが, 消したほうが気持ちがよいです.

元々,「appcompat-v7」の「v7」というのは,「API7まで対応できる」という後方互換の意味でしたよね.


Nexus 5X/6P 日本は23%割高だが ヨーロッパは 38%も割高とな

この価格は Google Store 上のプレオーダー価格での比較ですが.

Prices For Nexus 5X, Nexus 6P, And Chromecast Across The Globe

「Nexus5X 32GB」を見てみると.

Prices_For_Nexus_5X__Nexus_6P__And_Chromecast_Across_The_Globe

日本では, アメリカ価格の $429 に対して 23%高い $529.

確かに割高ですが, アジア圏はまだ控えめで, ヨーロッパ方面はもっと割高です.

Prices_For_Nexus_5X__Nexus_6P__And_Chromecast_Across_The_Globe

40%くらいも割高!!

各地域の事情や思惑があったり, 各機種によっても 割高率は変化しているようです.

同じものが, こんなに価格が違うのですね.