SlideShare a Scribd company logo
New in Andriod 4.4
〜Printing API, App Indexing, SMS Service, ADiA〜
木村尭海(@muchiki0226)
2013/11/4
目次
Printing API
App Indexing
SMS Service
Android Design in Action
Printing API
Printing API
プリント機能でサポートするもの
Print Manager
アプリとサービス間を仲介する

Apps
プリンターに対してプリントを要求する

Service
プリント要求を操作する
Priter Framework
アプリ開発者ができること
様々なコンテンツをワイヤレスでプリントアウトするこ
とができる

プリンタOEMベンダー
プリンターサービスを作りAPKとしてPlayStoreで公開す
ることができる

ユーザー
プリンターサービスを取得しアプリでコンテンツを印刷
することができる
Printing API
3種類の方法がある
Print bitmaps(easy)
Print HTML from web view(easy)
Print PDF Canvas(complex)
Print bitmaps
2種類の印刷タイプを選べことが可能
SCALE TO FIT
SCALE TO FILL
Print bitmaps
SupportLibrary.v4のPrintHelperを用いて実装する
void doBitmapPrint(){
PrintHelper bitmapPrinter = new PrintHelper(getActivity());
bitmapPrinter.setScalemode( PrinterHelper.SCALE_MODE_
FIT);

Bitmap bitmap = BitmapFactory.decodeResource(
getResources(), R.drawable.droids);
bitmapPrinter.printBitmap(“droids.jpg – test print”, bitmap);
}
PrintHelper APIs
void printBitmap(String jobName, Bitmap bitmap)
void printBitmap(String jobName, Uri imageFile)

void setColorMode(int colorMode)
int COLOR_MODE_COLOR
int COLOR_MODE_MONOCHROME

void setScaleMode(int scaleMode)
int SCALE_MODE_FILL
int SCALE_MODE_FIT

static boolean systemSupportsPrint()
Print HTML
void doWebViewPrint(){
WebView webView = new WebView(getActivity());
String htmlDocument = “<html><body>test</body></html>”;
webView.loadDataWithBaseURL(
null, htmlDocument, “text/HTML”, “UTF-8”, null);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String
url){
return false;
}
@Override
public void onPageFinished(WebView wv, String url){
createWebPrintJob(wv);
view = null;
}
});
}
Print HTML
注意点
ヘッダーとフッターは付けれない
ページの範囲を設定できない
WebViewのインスタンス一つにつき1つの印刷
ジョブしか追加できない
Print PDF Canvas
処理の流れ
PdfDocmuentからキャンバスを取得する
コンテンツをキャンバスに書き込む
PdfDocmuentを印刷する

詳細はAndroidDevlopersを確認してね!
Apps Indexing
Apps Indexing
ブラウザでの検索結果にアプリの開くボタンを
追加するディープリンク機能
アプリとWebサイトに情報を付与、サイトに登録
すると利用可能
https://developers.google.com/app-indexing/
HTMLの変更
android-appを追加する
フォr−マット
android-app://{package_id}/{scheme}/{host_path}
<html>
<head>
...
<link rel="alternate" href="androidapp://com.example.android/example/gizmos" />
...
</head>
<body> … </body>
XMLの変更
HTML同様に「android-app://〜」を埋め込む

<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>http://www.example.com/gizmos</loc>
<xhtml:link rel="alternate" href="androidapp://com.example.android/gizmos" />
</url>
...
</urlset>
Appsの変更
プレフィックスとホストを用いてインテント
フィルタを用いて起動する
起動するかをadbでテストできる
adb shell am start -W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
<activity android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_title_viewgizmos">
<action android:name="android.intent.action.VIEW" />
<!-- Accepts URIs that begin with "http://example.com/gizmos” -->
<data android:scheme="http"
android:host="example.com"
android:pathPrefix="/gizmos" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
SMS APIs
SMS APIs
SMS ContentProvider
システム設定で設定したデフォルトアプリのみ
直接のやりとりができる

その他のアプリ
読みこむことができる
パーミッション必須

書き込みはサイレントなエラーになる
なぜデフォルトアプリのみ
なのか
信頼性の強化
デフォルトアプリのみメッセージのやり取りを行
うため、不必要な別のアプリの送信をなくし、
ユーザーの知らないところでの送信を防ぐ

複雑さを減らす
別のアプリからのメッセージの削除やメッセージ
の変更をしないようにできるため、他のアプリを
考慮した実装が不要
SMSレシーバー
SMSContentProviderからSMSメッセージが
ブロードキャストで送られて来るときに
設定すべきレシーバー
パーミッション
android.permission.BROADCAST_SMS

フィルター
Action:
「android.provider.Telephony.SMS_DELIVER」
<receiver android:name=".SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action
android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
MMSレシーバー
SMSContentProviderからSMSメッセージが
ブロードキャストで送られて来るときに
設定すべきレシーバー
パーミッション
android.permission.BROADCAST_WAP_PUSH

フィルター
Action:
「android.provider.Telephony.WAP_PUSH_DELIVE
R」
Data:「application/vnd.wap.mms-message」
<receiver android:name=".MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
Activity
他のアプリからインテントでSMS/MMSメッセー
ジを受けとる
デフォルトアプリになっている場合は別のアプリ
からメッセージを送信するように要望されている
フィルター
Action:「android.intent.SENDTO」
Data:「sms」,「smsto」,「mms」,「mmsto」
<activity android:name=".ComposeSmsActivity" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
Service
他のアプリにメッセージが届いたことを即座に
知らせるためのサービス
パーミッション
android.permission.SEND_RESPOND_VIA_MESS
AGE

フィルター
Action:
「android.intent.action.RESPOND_VIA_MESSAGE」
<service android:name=".HeadlessSmsSendService"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
Data:「sms」,「smsto」,「mms」,「mmsto」
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
デフォルトアプリ変更時
デフォルトアプリ名の取得方法
String defaultSmsApp =
Telephony.Sms.getDefaultSmsPackage(context);

デフォルトアプリを変更する

Intent intent = new Intent(context,
Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Sms.Intents.EXTRA_PACKAGE_NAME,
context.getPackageName());
startActivity(intent);

デフォルトアプリを変更した際は元のデフォルトア
プリに戻す必要がある場合は
content.getPackageName()をdefaultSmsAppにする
と元に戻すことが可能
Android Design in Action
Android Design in Action
新しいUIとデザインガイドラインについて
ブランド
タッチフィードバック
フルスクリーン
ジェスチャ
ブランド
ブランドカラー
ブルーから変更可能
チェックボックス
プログレスバー
タブ
スクロール
ボタン
スライダー

ロゴ
アプリアイコン領域にアプリアイコン
以外の画像を配置可能
タッチフィードバック
KitKat以前
フィードバックカラーは青

KitKat
フィードバックカラーは背景色を明るく/暗くし
た色に変更
ブランドカラーに適応するため
フルスクリーン
フルスクリーン時の操作の追加
Immersive(没入)
上下スワイプから操作パネルを表示する概念を追加
ジェスチャ
概念
タッチ
ロングプレス
スワイプorドラッグ
ロングプレスドラッグ
ダブルタッチ
ダブルタッチドラッグ(新規)
ダブルタッチ後にドラッグを行う
上下、斜めが可能

GoogleMapにてすでに採用されている
参考
Android Developers
http://developer.android.com/index.html

Google Developers
https://developers.google.com/

ブリリアントサービスブログ
http://d.hatena.ne.jp/bs-android/

More Related Content

PDF
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
PPTX
iOS App Storeの話
PPTX
MTDDC 2019 LINE ボットからみた MT Data API の可能性
PDF
HTML5ハイブリッドアプリ の活用ポイント
PDF
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
PDF
Xamarin 概要 2015年5月版
PDF
HTML5ハイブリッドアプリ開発 で拓くビジネスチャンス
PDF
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
HTML5によるモバイルアプリ開発 が拓拓くビジネスチャンス
iOS App Storeの話
MTDDC 2019 LINE ボットからみた MT Data API の可能性
HTML5ハイブリッドアプリ の活用ポイント
クロスプラットフォーム モバイルアプリ開発ツール Xamarin 概要
Xamarin 概要 2015年5月版
HTML5ハイブリッドアプリ開発 で拓くビジネスチャンス
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション

Similar to New in Android4.4 (20)

PPTX
スマ研第2回レポート
PDF
【A-4】kintone API、JavaScript APIの実力
PPT
LINE お絵描きアプリハンズオン
PDF
Computer Vision と Translator Text API 使ってみた
PPTX
AppPot製品概要
PDF
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
PDF
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
PDF
クラウドコンピューティングについて 杉本 一晃
PDF
20140514 introduction of appcross & taiwan experience jepa(jp)
PDF
Watson.assistant chat bot-20200117
PDF
ナレッジモール論文2022_デジタルツインにおける共創アプローチ
PDF
LINEで広告プラットフォームをJava+Golangで立ち上げた話
PDF
Automation for everyone
PPT
IntalioのChemistry Of ProcessコンセプトとIntalio|BPPの動向021609
PDF
JPC2018[A4]Reimagine your business ~Microsoft Cloud/AI でビジネスを再構築
PDF
Api managementご案内資料 201611 1st contact
PDF
.NET 6 時代のデスクトップ アプリケーション開発
PDF
【媒体資料】AppDriver
PDF
Basis of Firefox Apps
スマ研第2回レポート
【A-4】kintone API、JavaScript APIの実力
LINE お絵描きアプリハンズオン
Computer Vision と Translator Text API 使ってみた
AppPot製品概要
【Monaca×mobile backend】 プッシュ通知をカンタン実装! スピード感ある開発をしよう!
【17-A-1】Mobile Future Conference開会のご挨拶/世界へ挑むDeNAの「X-border」「X-device」戦略
クラウドコンピューティングについて 杉本 一晃
20140514 introduction of appcross & taiwan experience jepa(jp)
Watson.assistant chat bot-20200117
ナレッジモール論文2022_デジタルツインにおける共創アプローチ
LINEで広告プラットフォームをJava+Golangで立ち上げた話
Automation for everyone
IntalioのChemistry Of ProcessコンセプトとIntalio|BPPの動向021609
JPC2018[A4]Reimagine your business ~Microsoft Cloud/AI でビジネスを再構築
Api managementご案内資料 201611 1st contact
.NET 6 時代のデスクトップ アプリケーション開発
【媒体資料】AppDriver
Basis of Firefox Apps
Ad

New in Android4.4