Android だけではありません.
iPhone やタブレットやMacなどすべてが
分かりやすくまとめられています.
Device Metrics - Google Design




いままでなんでなかったのか.
とりあえず, デザインや開発に便利に使えますね.
Android だけではありません.
iPhone やタブレットやMacなどすべてが
分かりやすくまとめられています.
Device Metrics - Google Design




いままでなんでなかったのか.
とりあえず, デザインや開発に便利に使えますね.
今年秋の予定だそうです.
Apple、「iOS 9」にAndroidからの簡単移行ツール「Move to iOS」 - ITmedia ニュース
移行できるもの
- 連絡先
- メッセージ履歴
- カメラで撮影した写真・動画
- ブラウザのブックマーク
- メールアカウント
- カレンダー
- 壁紙
- DRMフリーの音楽・書籍
Android上でリソースにアクセスできるものは
「アプリ-アプリ間で」すべて移行できるようです.
これまでもすでに移行の方法はありましたが,
主として「PCを経由して」の方法でした.

Android と iPhone 間のデータ移行の説明をながめる
これが「PCを経由」せずにスマホ同士で移行できるとなれば
便利っちゃあ便利だけども.
整理しながらコツコツ移行しようかな.
![]()
[I/O 2015] Chrome Custom Tabs Will Add Easy And Rich Web Content To Any App With Chrome Capabilities
サービス経由で「ウォームアップ」,「URL先読み」を行って
高速に開く.
公開されている Googleサンプルのうち利用するヘルパークラスなどは
前回エントリを参照.
ウォームアップも同時に行う.
アクテビティのライフサイクルに合わせて.
public class SampleActivity extends AppCompatActivity
        implements CustomTabActivityHelper.ConnectionCallback {
    private CustomTabActivityHelper mCustomTabActivityHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mCustomTabActivityHelper = new CustomTabActivityHelper();
        mCustomTabActivityHelper.setConnectionCallback(this);
    }
    @Override
    protected void onStart() {
        super.onStart();
        mCustomTabActivityHelper.bindCustomTabsService(this);
    }
    @Override
    protected void onStop() {
        super.onStop();
        mCustomTabActivityHelper.unbindCustomTabsService(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mCustomTabActivityHelper.setConnectionCallback(null);
    }
    @Override
    public void onCustomTabsConnected() {
    }
    @Override
    public void onCustomTabsDisconnected() {
    }
}
開くであろうURLが確定した時点でバックグランドで先読み.
mCustomTabActivityHelper.mayLaunchUrl(uri, null, null);
前回とほぼ同じ.
タイトル, アニメーションを付けてなめらかな体感に.
R.anim.slide_* はサンプルのものを利用.
CustomTabsIntent customTabsIntent =
    new CustomTabsIntent.Builder(mCustomTabActivityHelper.getSession())
        .setShowTitle(true)
        .setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left)
        .setExitAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right)
        .build();
CustomTabActivityHelper.openCustomTab(this, customTabsIntent, uri, new WebViewFallback());
public class SampleActivity extends AppCompatActivity
        implements CustomTabActivityHelper.ConnectionCallback {
    private CustomTabActivityHelper mCustomTabActivityHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mCustomTabActivityHelper = new CustomTabActivityHelper();
        mCustomTabActivityHelper.setConnectionCallback(this);
    }
    private void preFetchUrl(Uri uri) {
        mCustomTabActivityHelper.mayLaunchUrl(uri, null, null);
    }
    private void open(Uri uri) {
         CustomTabsIntent customTabsIntent = 
            new CustomTabsIntent.Builder(mCustomTabActivityHelper.getSession())
            .setShowTitle(true)
            .setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left)
            .setExitAnimations(this, android.R.anim.slide_in_left, android.R.anim.slide_out_right)
            .build();
         CustomTabActivityHelper.openCustomTab(this, customTabsIntent, uri, new WebViewFallback());
    }
    @Override
    protected void onStart() {
        super.onStart();
        mCustomTabActivityHelper.bindCustomTabsService(this);
    }
    @Override
    protected void onStop() {
        super.onStop();
        mCustomTabActivityHelper.unbindCustomTabsService(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mCustomTabActivityHelper.setConnectionCallback(null);
    }
    @Override
    public void onCustomTabsConnected() {
    }
    @Override
    public void onCustomTabsDisconnected() {
    }
}
イベントからプリフェッチしてからのオープンすればよい.
しかし「先読みのタイミング」て…
(つづく)