Upload
takaumi-kimura
View
1.574
Download
0
Embed Size (px)
DESCRIPTION
Android4.4で更新された新機能を4種類についてまとめました。 Printing API、App Indexing、SMS Service、Android Design in Actionについてです。
Citation preview
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 HTMLvoid 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="android-app://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="android-app://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></receiver>
MMSレシーバーSMSContentProviderから SMSメッセージがブロードキャストで送られて来るときに設定すべきレシーバーパーミッション
android.permission.BROADCAST_WAP_PUSH
フィルターAction:「 android.provider.Telephony.WAP_PUSH_DELIVER」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_MESSAGE
フィルターAction:「 android.intent.action.RESPOND_VIA_MESSAGE」Data:「 sms」 ,「 smsto」 ,「mms」 ,「mmsto」
<service android:name=".HeadlessSmsSendService" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" 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>
デフォルトアプリ変更時デフォルトアプリ名の取得方法
デフォルトアプリを変更する
デフォルトアプリを変更した際は元のデフォルトアプリに戻す必要がある場合は content.getPackageName()を defaultSmsAppにすると元に戻すことが可能
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);
Android Design in Action
Android Design in Action
新しい UIとデザインガイドラインについてブランドタッチフィードバックフルスクリーンジェスチャ
ブランドブランドカラーブルーから変更可能チェックボックスプログレスバータブスクロールボタンスライダー
ロゴアプリアイコン領域にアプリアイコン以外の画像を配置可能
タッチフィードバックKitKat以前フィードバックカラーは青
KitKatフィードバックカラーは背景色を明るく /暗くした色に変更ブランドカラーに適応するため
フルスクリーンフルスクリーン時の操作の追加
Immersive(没入 )上下スワイプから操作パネルを表示する概念を追加
ジェスチャ概念タッチロングプレススワイプ orドラッグロングプレスドラッグダブルタッチダブルタッチドラッグ(新規)ダブルタッチ後にドラッグを行う上下、斜めが可能
GoogleMapにてすでに採用されている
参考Android Developers
http://developer.android.com/index.html
Google Developershttps://developers.google.com/
ブリリアントサービスブログhttp://d.hatena.ne.jp/bs-android/