狠狠撸

狠狠撸Share a Scribd company logo
About kitakat
何が変わったの? 
どこでも絵文字! いつでも印刷クラウドもSDカードのファイ 
ルも同じように!
何が変わったの? 
完全なフルスクリーン体験、半透明表示も! 
端末が「カード」自身として! 
Loudnessフィルターで声が大きく聞きやすく! 
アプリの中でもChromeの 
HTML5体験
何が変わったの? 
統合された「字幕」対応 (Accessibility設定で) 
赤外線リモコンアプリ 
が開発可能に。 
Transition frameworkで 
アニメーションが 
簡単に、リッチに 
スタミナ強化 
?音楽再生をHW処理が可能に。 
?万歩計アプリがスタミナに。 
?位置測位しっぱなしでも、 
 バッテリーの持ちが大幅改善! 
 (加速度センサーを使った 
 「移動検出」センサーにより)
何が変わったの? : 開発者視点 
● Storage Framework 
○ Cloud drive対応を追加可能 (DocumentProvider) 
○ framework/base/package/ExternalStorageProvider 
は、内蔵メモリ(Primary)のみ。 
○ Secondary storageのパスは、OWNERのみ。 
● Low power sensor 
○ Step counter 
○ Significant motion detector 
● NFC Host-based Card Emulation
開発者視点: Storage Framework 
● Intent (System内蔵のファイル選択UI) 
○ OPEN_DOCUMENT 
○ CREATE_DOCUMENT 
● Storage Path取得API (on Context) 
○ getExternalFilesDirs() 
○ getObbDirs() 
○ getExternalCacheDirs() 
● アプリ固有 (package name)のパスにのみ、 
ファイル書き込み可能
開発者視点: Storage Framework 
● Document UI 
○ 内蔵メモリーが/sdcardになっているデバイスでしか、/sdcard上の 
ファイルは、ファイル選択不可。 
● アプリでの直ファイルアクセスの制限 
○ アプリ固有エリア(package name)にはアクセスできます。 
○ WRITE_EXTERNAL_STORAGEが宣言されていても、 
Secondary storageへは、好きな場所にファイル書き込みすること 
は出来ません。 
■ media_rwで保護されており、sdcard_rwではない。 
○ マルチユーザー対応デバイスであっても、OWNERしか、 
secondary storageのパスは得られません。
開発者視点: Storage Framework 
public class Environment { 
..snip.. 
public static class UserEnvironment { 
..snip.. 
public UserEnvironment(int userId) { 
..snip.. 
// Splice in any secondary storage paths, but only for owner 
final String rawSecondaryStorage = System.getenv(ENV_SECONDARY_STORAGE); 
if (!TextUtils.isEmpty(rawSecondaryStorage) && userId == UserHandle.USER_OWNER) { 
for (String secondaryPath : rawSecondaryStorage.split(":")) {
開発者視点: Storage Framework 
public class ExternalStorageProvider extends DocumentsProvider { 
...snip.. 
public boolean onCreate() { 
...snip.. 
// TODO: support multiple storage devices, requiring that volume serial 
// number be burned into rootId so we can identify files from different 
// volumes. currently we only use a static rootId for emulated storage, 
// since that storage never changes. 
if (!Environment.isExternalStorageEmulated()) return true; 
try { 
final String rootId = "primary"; 
final File path = Environment.getExternalStorageDirectory(); 
mIdToPath.put(rootId, path);
開発者視点: Storage Framework 
(クラウド対応 from ますいさん) 
● Providerからのネットワークアクセスは、別ス 
レッドにする。 
○ ParcelFileDescriptor 
○ CountDownLatch (via AsyncTask) 
● 参考 
○ DownloadStorageProvider 
○ ExternalStorageProvider 
○ github.comliveservices/LiveSDK-for-Android/ 
○ account.live.com/developers/applications/create
開発者視点: Low power sensor 
● STEP_COUNTER 
○ 歩数はCold boot時のみ、0に戻る。 
● Significant Motion Detector (4.3+) 
○ 静止している状態から動作した時を検出できるので、ユーザーへの 
通知に利用するとおもしろいかも。 
● Batch mode 
○ FIFOの数が重要 
○ flush()しましょう。

More Related Content

About kitakat

  • 3. 何が変わったの? 完全なフルスクリーン体験、半透明表示も! 端末が「カード」自身として! Loudnessフィルターで声が大きく聞きやすく! アプリの中でもChromeの HTML5体験
  • 4. 何が変わったの? 統合された「字幕」対応 (Accessibility設定で) 赤外線リモコンアプリ が開発可能に。 Transition frameworkで アニメーションが 簡単に、リッチに スタミナ強化 ?音楽再生をHW処理が可能に。 ?万歩計アプリがスタミナに。 ?位置測位しっぱなしでも、  バッテリーの持ちが大幅改善!  (加速度センサーを使った  「移動検出」センサーにより)
  • 5. 何が変わったの? : 開発者視点 ● Storage Framework ○ Cloud drive対応を追加可能 (DocumentProvider) ○ framework/base/package/ExternalStorageProvider は、内蔵メモリ(Primary)のみ。 ○ Secondary storageのパスは、OWNERのみ。 ● Low power sensor ○ Step counter ○ Significant motion detector ● NFC Host-based Card Emulation
  • 6. 開発者視点: Storage Framework ● Intent (System内蔵のファイル選択UI) ○ OPEN_DOCUMENT ○ CREATE_DOCUMENT ● Storage Path取得API (on Context) ○ getExternalFilesDirs() ○ getObbDirs() ○ getExternalCacheDirs() ● アプリ固有 (package name)のパスにのみ、 ファイル書き込み可能
  • 7. 開発者視点: Storage Framework ● Document UI ○ 内蔵メモリーが/sdcardになっているデバイスでしか、/sdcard上の ファイルは、ファイル選択不可。 ● アプリでの直ファイルアクセスの制限 ○ アプリ固有エリア(package name)にはアクセスできます。 ○ WRITE_EXTERNAL_STORAGEが宣言されていても、 Secondary storageへは、好きな場所にファイル書き込みすること は出来ません。 ■ media_rwで保護されており、sdcard_rwではない。 ○ マルチユーザー対応デバイスであっても、OWNERしか、 secondary storageのパスは得られません。
  • 8. 開発者視点: Storage Framework public class Environment { ..snip.. public static class UserEnvironment { ..snip.. public UserEnvironment(int userId) { ..snip.. // Splice in any secondary storage paths, but only for owner final String rawSecondaryStorage = System.getenv(ENV_SECONDARY_STORAGE); if (!TextUtils.isEmpty(rawSecondaryStorage) && userId == UserHandle.USER_OWNER) { for (String secondaryPath : rawSecondaryStorage.split(":")) {
  • 9. 開発者視点: Storage Framework public class ExternalStorageProvider extends DocumentsProvider { ...snip.. public boolean onCreate() { ...snip.. // TODO: support multiple storage devices, requiring that volume serial // number be burned into rootId so we can identify files from different // volumes. currently we only use a static rootId for emulated storage, // since that storage never changes. if (!Environment.isExternalStorageEmulated()) return true; try { final String rootId = "primary"; final File path = Environment.getExternalStorageDirectory(); mIdToPath.put(rootId, path);
  • 10. 開発者視点: Storage Framework (クラウド対応 from ますいさん) ● Providerからのネットワークアクセスは、別ス レッドにする。 ○ ParcelFileDescriptor ○ CountDownLatch (via AsyncTask) ● 参考 ○ DownloadStorageProvider ○ ExternalStorageProvider ○ github.comliveservices/LiveSDK-for-Android/ ○ account.live.com/developers/applications/create
  • 11. 開発者視点: Low power sensor ● STEP_COUNTER ○ 歩数はCold boot時のみ、0に戻る。 ● Significant Motion Detector (4.3+) ○ 静止している状態から動作した時を検出できるので、ユーザーへの 通知に利用するとおもしろいかも。 ● Batch mode ○ FIFOの数が重要 ○ flush()しましょう。