1 page.title=Android N for Developers 2 meta.tags="preview", "androidn" 3 page.tags="preview", "developer preview" 4 page.image=images/cards/card-n-apis_2x.png 5 @jd:body 6 7 8 9 10 <div id="tb-wrapper"> 11 <div id="tb"> 12 <h2> </h2> 13 <ol> 14 <ul style="list-style-type:none;"> 15 <li><a href="#multi-window_support"> </a></li> 16 <li><a href="#notification_enhancements"></a></li> 17 <li><a href="#jit_aot">JIT/AOT </a></li> 18 <li><a href="#quick_path_to_app_install"> </a></li> 19 <li><a href="#doze_on_the_go"> </a></li> 20 <li><a href="#background_optimizations"> </a></li> 21 <li><a href="#data_saver">Data Saver</a></li> 22 <li><a href="#vulkan">Vulkan API</a></li> 23 <li><a href="#tile_api">Quick Settings API</a></li> 24 <li><a href="#number-blocking"> </a></li> 25 <li><a href="#call_screening"> </a></li> 26 <li><a href="#multi-locale_languages"> </a></li> 27 <li><a href="#emoji"> </a></li> 28 <li><a href="#icu4">Android ICU4J API</a></li> 29 <li><a href="#gles_32">OpenGL ES 3.2 API</a></li> 30 <li><a href="#android_tv_recording">Android TV </a></li> 31 <li><a href="#android_for_work">Android for Work</a></li> 32 <li><a href="#accessibility_enhancements"></a></li> 33 <li><a href="#direct_boot"> </a></li> 34 <li><a href="#key_attestation">Key Attestation</a></li> 35 <li><a href="#network_security_config"> </a></li> 36 <li><a href="#default_trusted_ca"> CA</a></li> 37 <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li> 38 <li><a href="#scoped_directory_access"> </a></li> 39 <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li> 40 <li><a href="#sustained_performance_api"> API</a></li> 41 <li><a href="#vr">VR </a></li> 42 <li><a href="#print_svc"> </a></li> 43 <li><a href="#virtual_files"> </a></li> 44 <li><a href="#framemetrics_api">FrameMetricsListener API</a></li> 45 </ol> 46 </div> 47 </div> 48 49 50 51 <p>Android N , N Developer Preview 52 Android N . 53 . </p> 54 55 <p> 56 57 <a href="{@docRoot}preview/behavior-changes.html"> </a> , 58 , API 59 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API </a> . 60 </p> 61 62 <h2 id="multi-window_support"> </h2> 63 64 65 <p>Android N 66 . </p> 67 68 <p> . </p> 69 <ul> 70 <li>Android N 71 72 . 73 . </li> 74 75 <li>Android TV , <a href="{@docRoot}preview/features/picture-in-picture.html">PIP(Picture-In-Picture) 76 </a> , 77 .</li> 78 </ul> 79 80 <div class="col-4of10"> 81 <img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" /> 82 <p class="img-caption"> 83 <strong> 1.</strong> . 84 </p> 85 86 </div> 87 88 <p> 89 . , 90 91 , . </p> 92 93 <p> 94 . , 95 96 . , 97 .</p> 98 99 <p> 100 <a href="{@docRoot}preview/features/multi-window.html"> </a> 101 . 102 </p> 103 104 <h2 id="notification_enhancements"> </h2> 105 106 <p>Android N 107 . .</p> 108 109 <ul> 110 <li> 111 <strong> </strong>: 112 . 113 . 114 </li> 115 116 <li> 117 <strong> </strong>: <code>MessageStyle</code> 118 119 . , , 120 . 121 </li> 122 123 <li> 124 <strong> </strong>: 125 (: ) . 126 . Android 127 Wear 128 . 129 </li> 130 131 <li> 132 <strong> </strong>: Android 133 , 134 SMS . 135 </li> 136 137 <li> 138 <strong> </strong>: API 139 (: ) 140 . 141 </li> 142 </ul> 143 144 <div class="col-4of12"> 145 <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px"> 146 </div> 147 148 <div class="col-4of12"> 149 <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px"> 150 </div> 151 152 <div class="col-4of12"> 153 <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px"> 154 </div> 155 156 157 <p class="img-caption"> 158 <strong> 2.</strong> . 159 </p> 160 161 <p> 162 <a href="{@docRoot}preview/features/notification-updates.html"></a> 163 .</p> 164 165 166 167 <h2 id="jit_aot"> JIT/AOT </h2> 168 169 <p>Android N 170 JIT(Just in Time) ART . ART Android 171 . JIT ART AOT(Ahead of Time) 172 , , 173 .</p> 174 175 <p> ART 176 AOT/JIT . , ART 177 178 . 179 .</p> 180 181 <p> 182 , 183 RAM . .</p> 184 185 <p>ART 186 . ART , 187 .</p> 188 189 <h2 id="quick_path_to_app_install"> </h2> 190 191 <p>ART JIT 192 . Android 6.0 193 194 . , . </p> 195 196 <h2 id="doze_on_the_go"> ...</h2> 197 198 <p>Android 6.0 199 CPU 200 . </p> 201 202 <p> Android N 203 . 204 CPU . 205 , 206 .</p> 207 208 209 <img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" /> 210 <p class="img-caption"> 211 <strong> 3.</strong> 212 . 213 </p> 214 215 216 <p> 217 . 218 219 / . 220 .</p> 221 222 <p> 223 , {@link 224 android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 225 GPS/Wi-Fi CPU .</p> 226 227 <p> 228 . 229 . <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app"> 230 </a> .</p> 231 232 <h2 id="background_optimizations">Project Svelte: </h2> 233 234 <p>Project Svelte Android 235 RAM . Android N Project 236 Svelte . </p> 237 238 <p> . 239 , 240 RAM 241 . </p> 242 243 <p>Android 5.0 , 244 245 {@link android.app.job.JobScheduler}. , 246 . JobScheduler 247 , . </p> 248 249 <p> 250 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"> 251 <code>GCMNetworkManager</code></a>. Google Play 252 , Android 253 . 254 </p> 255 256 <p>Google <code>JobScheduler</code> 257 <code>GCMNetworkManager</code> 258 . , Android N 259 . , Google 260 261 .</p> 262 263 <p>Android N 264 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link 265 android.hardware.Camera#ACTION_NEW_PICTURE} {@link 266 android.hardware.Camera#ACTION_NEW_VIDEO} 267 . . 268 , N Developer Preview 269 <code>JobScheduler</code> API . </p> 270 271 <p> 272 <a href="{@docRoot}preview/features/background-optimization.html"> 273 </a> . 274 </p> 275 276 277 <h2 id="data_saver">Data Saver</h2> 278 279 <div class="col-5of12" style="margin-right:1.5em;"> 280 <img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd"> 281 282 <p class="img-caption" style="padding-right:2em;"> 283 <strong> 4.</strong> Settings Data Saver. 284 </p> 285 </div> 286 287 <p> , 288 . 289 . </p> 290 291 <p>Android N Data Saver 292 , Data Saver 293 . Data Saver 294 , Data Saver 295 . </p> 296 297 <p> <strong>Settings</strong> Data Saver 298 , 299 , 300 301 . Data Saver 302 .</p> 303 304 <p>Android N {@link android.net.ConnectivityManager} <a href="{@docRoot}preview/features/data-saver.html#status"> 305 Data Saver </a> <a href="{@docRoot}preview/features/data-saver.html#monitor-changes"> 306 </a> 307 . Data Saver 308 .</p> 309 310 311 <h2 id="vulkan">Vulkan API</h2> 312 313 <p> 314 Android N 3D API <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan</a> . 315 <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL 316 ES</a> , Vulkan Khronos Group 3D 317 . 318 </p> 319 320 <p> 321 Vulkan CPU , 322 GPU . , Vulkan 323 324 . 325 </p> 326 327 <p> 328 Vulkan Android NDK , 329 . 330 </p> 331 332 <ul> 333 <li> 334 </li> 335 336 <li> ( ) 337 </li> 338 339 <li>SPIR-V 340 </li> 341 342 <li>SPIR-V 343 </li> 344 </ul> 345 346 <p> 347 Vulkan Nexus 5X, Nexus 6P Nexus Player Vulkan 348 . Google 349 Vulkan . 350 </p> 351 352 <p> 353 <a href="{@docRoot}ndk/guides/graphics/index.html">API </a> . 354 </p> 355 356 <h2 id="tile_api">Quick Settings API</h2> 357 358 359 <div style="float:right;max-width:320px"> 360 <img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;"> 361 362 <p class="img-caption" style="padding-left:2em;"> 363 <strong> 5.</strong> Quick Settings . 364 </p> 365 366 367 </div><p>Quick Settings 368 . 369 Android N Quick Settings . </p> 370 371 <p>Google Quick Settings , 372 . , Quick Settings 373 . 374 . </p> 375 376 <p>, Android N API 377 Quick Settings , .</p> 378 379 <p> 380 381 , 382 . 383 </p> 384 385 <p> 386 , 387 Quick Settings . 388 </p> 389 390 <p> 391 392 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API </a> <code>android.service.quicksettings.Tile</code> . 393 </p> 394 395 396 397 <h2 id="number-blocking"> </h2> 398 399 <p> Android N , 400 API . 401 SMS , 402 . .</p> 403 404 <p>Android , 405 406 . .</p> 407 408 <ul> 409 <li> . 410 <li> 411 . 412 <li> . 413 </ul> 414 415 <p> Android 416 , 417 418 (: VOIP ) .</p> 419 420 <p> 421 422 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 423 </a> <code>android.provider.BlockedNumberContract</code> . 424 </p> 425 426 <h2 id="call_screening"> </h2> 427 428 <p> 429 Android N . 430 <code>CallScreeningService</code> , 431 {@link android.telecom.Call.Details Call.Details} 432 . 433 </p> 434 435 <ul> 436 <li> 437 <li> 438 <li> 439 </ul> 440 441 <p> 442 443 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 444 </a> <code>android.telecom.CallScreeningService</code> . 445 </p> 446 447 448 <h2 id="multi-locale_languages"> , </h2> 449 450 451 <p> 452 Android N Settings <strong> </strong> . 453 API 454 , 455 456 .</p> 457 458 <p> Android N 459 . , , , 460 25 , 100 461 .</p> 462 463 <p> 464 <code>LocaleList.GetDefault()</code> . Android N 465 . 466 .</p> 467 468 <p> 469 , <a href="{@docRoot}preview/features/multilingual-support.html"> </a> .</p> 470 471 472 <h2 id="emoji"> </h2> 473 474 <p> 475 Android N 476 477 . 478 . 479 </p> 480 481 <ul> 482 <li> 483 <strong> .</strong> 484 485 {@link android.graphics.Paint#hasGlyph(String)} . 486 </li> 487 <li> 488 <strong> .</strong> 489 490 . 491 . 492 . 493 . 494 495 <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt"> 496 </a> <em> </em> 497 . 498 </li> 499 <li> 500 <strong> .</strong> Android N 501 . 502 , 503 . 504 {@link android.graphics.Paint#hasGlyph(String)} 505 . 506 <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html"> 507 </a> . 508 </li> 509 </ul> 510 511 512 <h2 id="icu4">Android ICU4J API</h2> 513 514 <p> 515 Android N <code>android.icu</code> Android <a href="http://site.icu-project.org/">ICU4J</a> API 516 . 517 , <code>com.java.icu</code> 518 <code>android.icu</code> . ICU4J 519 , Android <code>android.icu</code> 520 API APK . 521 </p> 522 523 <p> 524 Android ICU4J API <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J </a> . 525 </p> 526 527 528 529 <h2 id="gles_32">OpenGL™ ES 3.2 API</h2> 530 531 <p>Android N OpenGL ES 3.2 .</p> 532 533 <ul> 534 <li> <code>EXT_texture_sRGB_decode</code> <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt"> 535 Android </a></a>(AEP) . 536 <li> HDR . 537 <li> BaseVertex . 538 <li> WebGL . 539 </ul> 540 541 <p>Android N OpenGL ES 3.2 API 542 <code>GLES32</code> . OpenGL ES 3.2 543 <code><uses-feature></code> <code>android:glEsVersion</code> 544 . </p> 545 546 <p> OpenGL ES 547 , OpenGL ES <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API </a> .</p> 548 549 550 <h2 id="android_tv_recording">Android TV </h2> 551 552 <p>Android N API Android TV 553 . API TV 554 , 555 . </p> 556 557 <p> <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording API</a> .</p> 558 559 560 <h2 id="android_for_work">Android for Work</h2> 561 562 <p>Android for Work Android N 563 API . , 564 <a href="{@docRoot}preview/features/afw.html">Android for Work </a> .</p> 565 566 <h3 id="work_profile_security_challenge"> </h3> 567 568 <p> 569 N SDK 570 571 . 572 . 573 . , 574 <code>ACTION_SET_NEW_PASSWORD</code> 575 , <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> 576 . 577 </p> 578 579 <p> 580 <code>setPasswordQuality()</code>, <code>setPasswordMinimumLength()</code> 581 582 583 (: PIN ). 584 <code>getParentProfileInstance()</code> <code>DevicePolicyManager</code> 585 . 586 , 587 <code>setOrganizationColor()</code> <code>setOrganizationName()</code> 588 . 589 </p> 590 <h3 id="turn_off_work"> </h3> 591 592 <p> . 593 , 594 , . 595 . 596 . 597 . </p> 598 599 <h3 id="always_on_vpn"> VPN </h3> 600 601 <p> VPN 602 . 603 VPN .</p> 604 605 <p> 606 <code>DevicePolicyManager</code> 607 <code>setAlwaysOnVpnPackage()</code> 608 <code>getAlwaysOnVpnPackage()</code>. 609 </p> 610 611 <p> 612 VPN , VPN VPN . 613 , <code>android.net.VpnService</code> 614 . </p> 615 616 <p> 617 , <strong>Settings>More>Vpn</strong> 618 <code>VPNService</code> 619 VPN . 620 </p> 621 622 <h3 id="custom_provisioning"> </h3> 623 624 <p> 625 626 . 627 <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> 628 , <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> 629 . 630 </p> 631 632 <h2 id="accessibility_enhancements"> </h2> 633 634 <p> Android N Welcome 635 Vision Settings . 636 , , 637 TalkBack . </p> 638 639 <p> , 640 . 641 . Settings > 642 Accessibility .</p> 643 644 <p>Android N , 645 . API , , 646 647 .</p> 648 649 <p> 650 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API </a> <code>android.accessibilityservice.GestureDescription</code> .</p> 651 652 653 <h2 id="direct_boot"> </h2> 654 655 <p> , 656 . , 657 , 658 , 659 . , 660 .</p> 661 662 <p> Android N 663 . 664 665 . , 666 , , . </p> 667 668 <p> , 669 670 . , 671 . <code>LOCKED_BOOT_COMPLETED</code> 672 673 . , 674 . 675 . </p> 676 677 <a href="{@docRoot}preview/features/direct-boot.html"> </a> .</p> 678 </p> 679 680 681 <h2 id="key_attestation">Key Attestation</h2> 682 683 <p> Android 684 . 685 Linux , Android , 686 .</p> 687 688 <p> 689 Android N Key Attestation . Key Attestation 690 - RSA EC 691 , 692 . </p> 693 694 <p> - X.509 695 696 . 697 ECDSA . 698 699 700 .</p> 701 702 <p> Android 703 , Key Attestation 704 <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements"></a> <a class="external-link" href="https://source.android.com/security/trusty/index.html">TEE(Trusted Execution Environment)</a> 705 .</p> 706 707 <ul> 708 <li> OS </li> 709 <li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link"> </a> </li> 710 </ul> 711 712 <p> 713 <a href="https://source.android.com/security/keystore/" class="external-link"> </a> .</p> 714 715 <p>Key Attestation Android N 716 .</p> 717 718 <h2 id="network_security_config"> </h2> 719 720 <p>Android N 721 API(: X509TrustManager) 722 <em> </em> (HTTPS, TLS) 723 .</p> 724 725 <p> :</p> 726 <ul> 727 <li><b> .</b> 728 (CA) . , 729 CA . 730 </li> 731 <li><b> .</b> 732 733 . 734 </li> 735 <li><b> .</b> 736 .</li> 737 <li><b> .</b> 738 .</li> 739 </ul> 740 741 <p> <a href="{@docRoot}preview/features/security-config.html"> </a> 742 .</p> 743 744 <h2 id="default_trusted_ca"> </h2> 745 746 <p>, Android N 747 (CA) . Android N 748 CA 749 <a href="{@docRoot}preview/features/security-config.html"> </a> 750 CA .</p> 751 752 <h2 id="apk_signature_v2">APK Signature Scheme v2</h2> 753 754 <p> 755 Android N 756 APK 757 APK Signature Scheme v2 . , Android Studio 2.2 Android 758 Plugin for Gradle 2.2 APK Signature Scheme v2 JAR 759 . 760 </p> 761 762 <p> 763 APK Signature Scheme v2 , 764 . APK 765 Signature Scheme v2 . 766 Android Studio 2.2 Android Plugin for Gradle 2.2 767 . 768 <code>build.gradle</code> , 769 <code>v2SigningEnabled false</code> 770 . 771 </p> 772 773 <pre> 774 android { 775 ... 776 defaultConfig { ... } 777 signingConfigs { 778 release { 779 storeFile file("myreleasekey.keystore") 780 storePassword "password" 781 keyAlias "MyReleaseKey" 782 keyPassword "password" 783 <strong>v2SigningEnabled false</strong> 784 } 785 } 786 } 787 </pre> 788 789 <p class="caution"><strong>: </strong> APK 790 Signature Scheme v2 791 . <code>zipalign</code> 792 APK Signature Scheme v2 . 793 </p> 794 795 <p> 796 Android Studio 797 <a href="{@docRoot}studio/publish/app-signing.html#release-mode"> 798 </a> Android Plugin for Gradle <a href="{@docRoot}studio/build/build-variants.html#signing"> 799 </a> Android Studio . 800 </p> 801 802 <h2 id="scoped_directory_access"> </h2> 803 804 <p>Android N API 805 <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal"> </a> (SD ) 806 . API 807 (: <code>Pictures</code> ) . 808 809 <code>READ_EXTERNAL_STORAGE</code> (SAF) 810 API 811 .</p> 812 813 <p>, API 814 . API 815 816 UI .</p> 817 818 <p> 819 <a href="{@docRoot}preview/features/scoped-folder-access.html"> 820 </a> .</p> 821 822 <h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2> 823 824 <p> 825 Android N "Alt + /" <em>Keyboard Shortcuts</em> 826 , 827 . ( ), 828 829 . 830 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API </a> 831 <code>Activity.onProvideKeyboardShortcuts()</code> . 832 </p> 833 834 <p> 835 Keyboard Shortcuts Helper 836 {@code Activity.requestKeyboardShortcutsHelper()} . 837 </p> 838 839 <h2 id="sustained_performance_api"> API</h2> 840 841 <p> 842 843 (system-on-chip) , 844 . 845 . 846 </p> 847 848 <p> 849 , Android N 850 <em> </em> , OEM 851 . 852 853 . 854 </p> 855 856 <p> 857 N Developer Preview 858 API Nexus 6P . 859 860 . 861 {@code Window.setSustainedPerformanceMode()} . 862 . 863 </p> 864 865 <h2 id="vr">VR </h2> 866 867 <p> 868 VR , Android N 869 VR . VR CPU 870 . 871 872 VR . , 873 Android N . Android N VR 874 <a href="https://developers.google.com/vr/android/">Android Google VR SDK</a> . 875 </p> 876 877 878 <h2 id="print_svc"> </h2> 879 880 <p> 881 Android N 882 . 883 </p> 884 885 <p> 886 , 887 . 888 </p> 889 890 <ul> 891 <li><code>PrinterInfo.Builder.setResourceIconId()</code> ID 892 . 893 </li> 894 895 <li><code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> , 896 <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> 897 898 . 899 </li> 900 </ul> 901 902 <p> 903 , <code>PrinterInfo.Builder.setInfoIntent()</code> 904 . 905 </p> 906 907 <p> 908 <code>android.printservice.PrintJob.setProgress()</code> 909 <code>android.printservice.PrintJob.setStatus()</code> 910 911 . 912 </p> 913 914 <p> 915 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API </a> . 916 </p> 917 918 <h2 id="framemetrics_api">FrameMetricsListener API</h2> 919 920 <p> 921 FrameMetricsListener API UI 922 . API 923 Pub/Sub API . 924 <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a> 925 dumpsys gfxinfo framestats</code> , 120 . 926 </p> 927 928 <p> 929 FrameMetricsListener USB 930 UI . API 931 932 {@code adb shell dumpsys gfxinfo} . 933 , . 934 935 . 936 UI 937 . 938 </p> 939 940 <p> 941 <code>FrameMetricsListener.onMetricsAvailable()</code> 942 . 943 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API </a> {@code FrameMetricsListener} 944 . 945 </p> 946 947 <p> 948 API {@code FrameMetrics} 949 . 950 {@code UNKNOWN_DELAY_DURATION}, 951 {@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION}, 952 {@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION}, 953 {@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION}, 954 {@code TOTAL_DURATION}, {@code FIRST_DRAW_FRAME}. 955 </p> 956 957 958 <h2 id="virtual_files"> </h2> 959 960 <p> 961 Android 962 Google , 963 . 964 , 965 . 966 </p> 967 968 <p> 969 Android N <em> </em> 970 . , 971 {@link android.content.Intent#ACTION_VIEW} 972 URI URI {@link android.provider.DocumentsProvider} 973 . Android N , 974 . 975 </p> 976 977 <p> 978 URI 979 {@link android.content.Intent} UI . {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} 980 981 982 , 983 {@link android.content.Intent#CATEGORY_OPENABLE} . 984 </p> 985 986 <p> 987 , 988 {@link android.app.Activity#onActivityResult onActivityResult()} . 989 , URI 990 . 991 </p> 992 993 <pre> 994 // Other Activity code ... 995 996 final static private int REQUEST_CODE = 64; 997 998 // We listen to the OnActivityResult event to respond to the user's selection. 999 @Override 1000 public void onActivityResult(int requestCode, int resultCode, 1001 Intent resultData) { 1002 try { 1003 if (requestCode == REQUEST_CODE && 1004 resultCode == Activity.RESULT_OK) { 1005 1006 Uri uri = null; 1007 1008 if (resultData != null) { 1009 uri = resultData.getData(); 1010 1011 ContentResolver resolver = getContentResolver(); 1012 1013 // Before attempting to coerce a file into a MIME type, 1014 // check to see what alternative MIME types are available to 1015 // coerce this file into. 1016 String[] streamTypes = 1017 resolver.getStreamTypes(uri, "*/*"); 1018 1019 AssetFileDescriptor descriptor = 1020 resolver.openTypedAssetFileDescriptor( 1021 uri, 1022 streamTypes[0], 1023 null); 1024 1025 // Retrieve a stream to the virtual file. 1026 InputStream inputStream = descriptor.createInputStream(); 1027 } 1028 } 1029 } catch (Exception ex) { 1030 Log.e("EXCEPTION", "ERROR: ", ex); 1031 } 1032 } 1033 </pre> 1034 1035 <p> 1036 1037 <a href="{@docRoot}guide/topics/providers/document-provider.html"> 1038 </a> . 1039 </p> 1040