1 page.title= 2 @jd:body 3 <div id="qv-wrapper"> 4 <div id="qv"> 5 6 7 <h2></h2> 8 <ol> 9 <li> 10 <a href="#DataStorage"> </a> 11 </li> 12 <li> 13 <a href="#ContentURI"> URI </a> 14 </li> 15 <li> 16 <a href="#ContentProvider">ContentProvider </a> 17 <ol> 18 <li> 19 <a href="#RequiredAccess"></a> 20 </li> 21 <li> 22 <a href="#Query">query() </a> 23 </li> 24 <li> 25 <a href="#Insert">insert() </a> 26 </li> 27 <li> 28 <a href="#Delete">delete() </a> 29 </li> 30 <li> 31 <a href="#Update">update() </a> 32 </li> 33 <li> 34 <a href="#OnCreate">onCreate() </a> 35 </li> 36 </ol> 37 </li> 38 <li> 39 <a href="#MIMETypes"> MIME </a> 40 <ol> 41 <li> 42 <a href="#TableMIMETypes"> MIME </a> 43 </li> 44 <li> 45 <a href="#FileMIMETypes"> MIME </a> 46 </li> 47 </ol> 48 </li> 49 <li> 50 <a href="#ContractClass"> </a> 51 </li> 52 <li> 53 <a href="#Permissions"> </a> 54 </li> 55 <li> 56 <a href="#ProviderElement"><provider> </a> 57 </li> 58 <li> 59 <a href="#Intents"></a> 60 </li> 61 </ol> 62 <h2></h2> 63 <ol> 64 <li> 65 {@link android.content.ContentProvider} 66 </li> 67 <li> 68 {@link android.database.Cursor} 69 </li> 70 <li> 71 {@link android.net.Uri} 72 </li> 73 </ol> 74 <h2></h2> 75 <ol> 76 <li> 77 <a href="{@docRoot}resources/samples/NotePad/index.html"> 78 Note Pad </a> 79 80 </li> 81 </ol> 82 <h2></h2> 83 <ol> 84 <li> 85 <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> 86 </a> 87 </li> 88 <li> 89 <a href="{@docRoot}guide/topics/providers/calendar-provider.html"> 90 </a> 91 </li> 92 </ol> 93 </div> 94 </div> 95 96 97 <p> 98 Android 1 99 100 1 {@link android.content.ContentProvider} 101 102 103 104 105 </p> 106 <p> 107 API 108 109 </p> 110 111 112 <!-- Before You Start Building --> 113 <h2 id="BeforeYouStart"></h2> 114 <p> 115 116 </p> 117 <ol> 118 <li> 119 <strong> </strong> 1 120 121 <ul> 122 <li></li> 123 <li></li> 124 <li></li> 125 </ul> 126 <p> 127 SQLite <em></em> 128 129 </p> 130 </li> 131 <li> 132 <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> </a> 133 134 135 </li> 136 </ol> 137 <p> 138 139 </p> 140 <ol> 141 <li> 142 2 143 <dl> 144 <dt> 145 146 </dt> 147 <dd> 148 149 150 151 152 </dd> 153 <dt> 154 155 </dt> 156 <dd> 157 158 159 160 SQLite 161 162 Android <a href="#DataStorage"> </a> 163 164 165 </dd> 166 </dl> 167 </li> 168 <li> 169 {@link android.content.ContentProvider} 170 Android 171 <a href="#ContentProvider">ContentProvider </a> 172 173 </li> 174 <li> 175 URI 176 177 178 179 URI <a href="#ContentURI"> URI </a> 180 181 182 <a href="#Intents"></a> 183 184 </li> 185 <li> 186 {@link android.content.AbstractThreadedSyncAdapter} 187 188 189 </li> 190 </ol> 191 192 193 <!-- Designing Data Storage --> 194 <h2 id="DataStorage"> </h2> 195 <p> 196 197 198 199 </p> 200 <p> 201 Android 202 </p> 203 <ul> 204 <li> 205 Android Android SQLite API 206 {@link android.database.sqlite.SQLiteOpenHelper} {@link android.database.sqlite.SQLiteDatabase} 207 208 209 210 <p> 211 212 213 214 </p> 215 </li> 216 <li> 217 Android API 218 <a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a> 219 220 221 222 </li> 223 <li> 224 {@link java.net} {@link android.net} 225 226 227 <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html"></a> 228 229 </li> 230 </ul> 231 <h3 id="DataDesign"> 232 233 </h3> 234 <p> 235 236 </p> 237 <ul> 238 <li> 239 240 241 {@link android.widget.ListView} <code>_ID</code> {@link android.provider.BaseColumns#_ID BaseColumns._ID} 242 243 244 245 246 </li> 247 <li> 248 249 250 {@link android.content.ContentResolver} 251 252 </li> 253 <li> 254 BLOB 255 <a href="http://code.google.com/p/protobuf">Protocol Buffer</a> <a href="http://www.json.org">JSON </a>BLOB 256 257 258 <p> 259 BLOB <em></em>MIME 1 BLOB 260 261 BLOB MIME 262 263 {@link android.provider.ContactsContract.Data} 264 265 266 </p> 267 </li> 268 </ul> 269 <!-- Designing Content URIs --> 270 <h2 id="ContentURI"> URI </h2> 271 <p> 272 <strong> URI</strong> URI URI <strong></strong><strong></strong> 273 274 ID 275 {@link android.content.ContentProvider} URI 276 277 278 </p> 279 <p> 280 URI <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> </a> 281 282 283 </p> 284 <h3></h3> 285 <p> 286 Android 1 287 288 Android 289 290 Android <code>com.example.<appname></code> <code>com.example.<appname>.provider</code> 291 292 293 </p> 294 <h3></h3> 295 <p> 296 URI 297 <em>table1</em> <em>table2</em> 2 URI <code>com.example.<appname>.provider/table1</code> <code>com.example.<appname>.provider/table2</code> 298 299 300 301 1 302 303 </p> 304 <h3> URI ID </h3> 305 <p> 306 URI ID URI 1 ID <code>_ID</code> 307 308 309 310 </p> 311 <p> 312 {@link android.widget.CursorAdapter} {@link android.database.Cursor} {@link android.widget.ListView} 313 314 315 {@link android.widget.CursorAdapter} {@link android.database.Cursor} <code>_ID</code> 316 317 </p> 318 <p> 319 UI 320 {@link android.widget.ListView} {@link android.database.Cursor} <code>_ID</code> URI 321 322 323 324 </p> 325 <h3> URI </h3> 326 <p> 327 URI API {@link android.content.UriMatcher} URI 328 329 <code>switch</code> 1 URI 330 331 </p> 332 <p> 333 URI URI 334 </p> 335 <ul> 336 <li> 337 <strong><code>*</code>:</strong> 338 </li> 339 <li> 340 <strong><code>#</code>:</strong> 341 </li> 342 </ul> 343 <p> 344 URI URI <code>com.example.app.provider</code> 345 346 347 </p> 348 <ul> 349 <li> 350 <code>content://com.example.app.provider/table1</code>: <code>table1</code> 351 </li> 352 <li> 353 <code>content://com.example.app.provider/table2/dataset1</code>: <code>dataset1</code> 354 355 </li> 356 <li> 357 <code>content://com.example.app.provider/table2/dataset2</code>: <code>dataset2</code> 358 359 </li> 360 <li> 361 <code>content://com.example.app.provider/table3</code>: <code>table3</code> 362 </li> 363 </ul> 364 <p> 365 ID URI <code>table3</code> <code>1</code> <code>content://com.example.app.provider/table3/1</code> 366 367 368 </p> 369 <p> 370 URI 371 </p> 372 <dl> 373 <dt> 374 <code>content://com.example.app.provider/*</code> 375 </dt> 376 <dd> 377 URI 378 </dd> 379 <dt> 380 <code>content://com.example.app.provider/table2/*</code>: 381 </dt> 382 <dd> 383 <code>dataset1</code> <code>dataset2</code> URI <code>table1</code> <code>table3</code> URI 384 385 386 </dd> 387 <dt> 388 <code>content://com.example.app.provider/table3/#</code>: <code>table3</code> 1 URI <code>6</code> <code>content://com.example.app.provider/table3/6</code> 389 390 391 392 </dt> 393 </dl> 394 <p> 395 {@link android.content.UriMatcher} 396 URI <code>content://<authority>/<path></code> 1 <code>content://<authority>/<path>/<id></code> URI 1 URI 397 398 399 400 </p> 401 <p> 402 {@link android.content.UriMatcher#addURI(String, String, int) addURI()} 403 {@link android.content.UriMatcher#match(Uri) 404 match()} URI <code>switch</code> 1 405 406 </p> 407 <pre class="prettyprint"> 408 public class ExampleProvider extends ContentProvider { 409 ... 410 // Creates a UriMatcher object. 411 private static final UriMatcher sUriMatcher; 412 ... 413 /* 414 * The calls to addURI() go here, for all of the content URI patterns that the provider 415 * should recognize. For this snippet, only the calls for table 3 are shown. 416 */ 417 ... 418 /* 419 * Sets the integer value for multiple rows in table 3 to 1. Notice that no wildcard is used 420 * in the path 421 */ 422 sUriMatcher.addURI("com.example.app.provider", "table3", 1); 423 424 /* 425 * Sets the code for a single row to 2. In this case, the "#" wildcard is 426 * used. "content://com.example.app.provider/table3/3" matches, but 427 * "content://com.example.app.provider/table3 doesn't. 428 */ 429 sUriMatcher.addURI("com.example.app.provider", "table3/#", 2); 430 ... 431 // Implements ContentProvider.query() 432 public Cursor query( 433 Uri uri, 434 String[] projection, 435 String selection, 436 String[] selectionArgs, 437 String sortOrder) { 438 ... 439 /* 440 * Choose the table to query and a sort order based on the code returned for the incoming 441 * URI. Here, too, only the statements for table 3 are shown. 442 */ 443 switch (sUriMatcher.match(uri)) { 444 445 446 // If the incoming URI was for all of table3 447 case 1: 448 449 if (TextUtils.isEmpty(sortOrder)) sortOrder = "_ID ASC"; 450 break; 451 452 // If the incoming URI was for a single row 453 case 2: 454 455 /* 456 * Because this URI was for a single row, the _ID value part is 457 * present. Get the last path segment from the URI; this is the _ID value. 458 * Then, append the value to the WHERE clause for the query 459 */ 460 selection = selection + "_ID = " uri.getLastPathSegment(); 461 break; 462 463 default: 464 ... 465 // If the URI is not recognized, you should do some error handling here. 466 } 467 // call the code to actually do the query 468 } 469 </pre> 470 <p> 471 {@link android.content.ContentUris} URI <code>id</code> 472 {@link android.net.Uri} {@link android.net.Uri.Builder} {@link android.net.Uri} 473 474 475 </p> 476 477 <!-- Implementing the ContentProvider class --> 478 <h2 id="ContentProvider">ContentProvider </h2> 479 <p> 480 {@link android.content.ContentProvider} 481 {@link android.content.ContentResolver} {@link android.content.ContentProvider} 482 483 484 </p> 485 <h3 id="RequiredAccess"></h3> 486 <p> 487 {@link android.content.ContentProvider} 6 488 {@link android.content.ContentProvider#onCreate() onCreate()} 489 490 491 </p> 492 <dl> 493 <dt> 494 {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) 495 query()} 496 </dt> 497 <dd> 498 499 500 {@link android.database.Cursor} 501 </dd> 502 <dt> 503 {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} 504 </dt> 505 <dd> 506 507 URI 508 509 </dd> 510 <dt> 511 {@link android.content.ContentProvider#update(Uri, ContentValues, String, String[]) 512 update()} 513 </dt> 514 <dd> 515 516 517 </dd> 518 <dt> 519 {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} 520 </dt> 521 <dd> 522 523 524 </dd> 525 <dt> 526 {@link android.content.ContentProvider#getType(Uri) getType()} 527 </dt> 528 <dd> 529 URI MIME <a href="#MIMETypes"> MIME </a> 530 531 </dd> 532 <dt> 533 {@link android.content.ContentProvider#onCreate() onCreate()} 534 </dt> 535 <dd> 536 Android 537 {@link android.content.ContentResolver} 538 539 </dd> 540 </dl> 541 <p> 542 {@link android.content.ContentResolver} 543 544 </p> 545 <p> 546 547 </p> 548 <ul> 549 <li> 550 {@link android.content.ContentProvider#onCreate() onCreate()} 551 <a href="{@docRoot}guide/components/processes-and-threads.html"></a> 552 553 554 555 </li> 556 <li> 557 {@link android.content.ContentProvider#onCreate() 558 onCreate()} 559 <a href="#OnCreate">onCreate() </a> 560 561 </li> 562 <li> 563 564 565 {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} 0 566 567 568 </li> 569 </ul> 570 <h3 id="Query">query() </h3> 571 <p> 572 {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) 573 ContentProvider.query()} {@link android.database.Cursor} {@link java.lang.Exception} 574 575 SQLite {@link android.database.sqlite.SQLiteDatabase} <code>query()</code> {@link android.database.Cursor} 576 577 578 {@link android.database.Cursor#getCount()} 0 {@link android.database.Cursor} 579 580 <code>null</code> 581 </p> 582 <p> 583 SQLite {@link android.database.Cursor} 584 {@link android.database.MatrixCursor} {@link java.lang.Object} 585 {@link android.database.MatrixCursor#addRow(Object[]) addRow()} 586 587 </p> 588 <p> 589 Android {@link java.lang.Exception} 590 Android 591 592 </p> 593 <ul> 594 <li> 595 {@link java.lang.IllegalArgumentException} URI 596 597 </li> 598 <li> 599 {@link java.lang.NullPointerException} 600 </li> 601 </ul> 602 <h3 id="Insert">insert() </h3> 603 <p> 604 {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} {@link android.content.ContentValues} 605 606 {@link android.content.ContentValues} 607 608 609 </p> 610 <p> 611 URI {@link android.content.ContentUris#withAppendedId(Uri, long) withAppendedId()} <code>_ID</code> URI 612 613 614 </p> 615 <h3 id="Delete">delete() </h3> 616 <p> 617 {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} 618 619 620 621 622 </p> 623 <h3 id="Update">update() </h3> 624 <p> 625 {@link android.content.ContentProvider#update(Uri, ContentValues, String, String[]) 626 update()} {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} {@link android.content.ContentValues} {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) 627 ContentProvider.query()} <code>selection</code> <code>selectionArgs</code> 628 629 630 631 632 </p> 633 <h3 id="OnCreate">onCreate() </h3> 634 <p> 635 Android {@link android.content.ContentProvider#onCreate() 636 onCreate()} 637 638 {@link android.content.ContentProvider#onCreate() onCreate()} 639 640 641 642 </p> 643 <p> 644 SQLite {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} {@link android.database.sqlite.SQLiteOpenHelper} SQL 645 646 647 {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase 648 getWritableDatabase()} {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) 649 SQLiteOpenHelper.onCreate()} 650 651 652 </p> 653 <p> 654 2 {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) 655 SQLiteOpenHelper.onCreate()} 656 657 {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} 658 659 </p> 660 <pre class="prettyprint"> 661 public class ExampleProvider extends ContentProvider 662 663 /* 664 * Defines a handle to the database helper object. The MainDatabaseHelper class is defined 665 * in a following snippet. 666 */ 667 private MainDatabaseHelper mOpenHelper; 668 669 // Defines the database name 670 private static final String DBNAME = "mydb"; 671 672 // Holds the database object 673 private SQLiteDatabase db; 674 675 public boolean onCreate() { 676 677 /* 678 * Creates a new helper object. This method always returns quickly. 679 * Notice that the database itself isn't created or opened 680 * until SQLiteOpenHelper.getWritableDatabase is called 681 */ 682 mOpenHelper = new MainDatabaseHelper( 683 getContext(), // the application context 684 DBNAME, // the name of the database) 685 null, // uses the default SQLite cursor 686 1 // the version number 687 ); 688 689 return true; 690 } 691 692 ... 693 694 // Implements the provider's insert method 695 public Cursor insert(Uri uri, ContentValues values) { 696 // Insert code here to determine which table to open, handle error-checking, and so forth 697 698 ... 699 700 /* 701 * Gets a writeable database. This will trigger its creation if it doesn't already exist. 702 * 703 */ 704 db = mOpenHelper.getWritableDatabase(); 705 } 706 } 707 </pre> 708 <p> 709 {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) 710 SQLiteOpenHelper.onCreate()} 711 712 </p> 713 <pre class="prettyprint"> 714 ... 715 // A string that defines the SQL statement for creating a table 716 private static final String SQL_CREATE_MAIN = "CREATE TABLE " + 717 "main " + // Table's name 718 "(" + // The columns in the table 719 " _ID INTEGER PRIMARY KEY, " + 720 " WORD TEXT" 721 " FREQUENCY INTEGER " + 722 " LOCALE TEXT )"; 723 ... 724 /** 725 * Helper class that actually creates and manages the provider's underlying data repository. 726 */ 727 protected static final class MainDatabaseHelper extends SQLiteOpenHelper { 728 729 /* 730 * Instantiates an open helper for the provider's SQLite data repository 731 * Do not do database creation and upgrade here. 732 */ 733 MainDatabaseHelper(Context context) { 734 super(context, DBNAME, null, 1); 735 } 736 737 /* 738 * Creates the data repository. This is called when the provider attempts to open the 739 * repository and SQLite reports that it doesn't exist. 740 */ 741 public void onCreate(SQLiteDatabase db) { 742 743 // Creates the main table 744 db.execSQL(SQL_CREATE_MAIN); 745 } 746 } 747 </pre> 748 749 750 <!-- Implementing ContentProvider MIME Types --> 751 <h2 id="MIMETypes">ContentProvider MIME </h2> 752 <p> 753 {@link android.content.ContentProvider} MIME 2 754 </p> 755 <dl> 756 <dt> 757 {@link android.content.ContentProvider#getType(Uri) getType()} 758 </dt> 759 <dd> 760 1 761 </dd> 762 <dt> 763 {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()} 764 </dt> 765 <dd> 766 767 </dd> 768 </dl> 769 <h3 id="TableMIMETypes"> MIME </h3> 770 <p> 771 {@link android.content.ContentProvider#getType(Uri) getType()} MIME {@link java.lang.String} URI 772 773 {@link android.net.Uri} URI URI 774 775 776 </p> 777 <p> 778 HTMLJPEG {@link android.content.ContentProvider#getType(Uri) getType()} MIME 779 780 <a href="http://www.iana.org/assignments/media-types/index.htm">IANA MIME Media Types</a> 781 782 783 </p> 784 <p> 785 1 URI {@link android.content.ContentProvider#getType(Uri) getType()} Android MIME MIME 786 787 788 </p> 789 <ul> 790 <li> 791 : <code>vnd</code> 792 </li> 793 <li> 794 : 795 <ul> 796 <li> 797 URI 1 : <code>android.cursor.<strong>item</strong>/</code> 798 </li> 799 <li> 800 URI : <code>android.cursor.<strong>dir</strong>/</code> 801 </li> 802 </ul> 803 </li> 804 <li> 805 : <code>vnd.<name></code>.<code><type></code> 806 <p> 807 <code><name></code> <code><type></code> 808 <code><name></code> <code><type></code> URI 809 810 <code><name></code> Android 811 <code><type></code> URI 812 813 814 </p> 815 816 </li> 817 </ul> 818 <p> 819 <code>com.example.app.provider</code> <code>table1</code> <code>table1</code> MIME 820 821 822 </p> 823 <pre> 824 vnd.android.cursor.<strong>dir</strong>/vnd.com.example.provider.table1 825 </pre> 826 <p> 827 <code>table1</code> 1 MIME 828 </p> 829 <pre> 830 vnd.android.cursor.<strong>item</strong>/vnd.com.example.provider.table1 831 </pre> 832 <h3 id="FileMIMETypes"> MIME </h3> 833 <p> 834 {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()} 835 836 URI MIME {@link java.lang.String} MIME MIME MIME 837 838 839 </p> 840 <p> 841 <code>.jpg</code><code>.png</code><code>.gif</code> 842 843 {@link android.content.ContentResolver#getStreamTypes(Uri, String) 844 ContentResolver.getStreamTypes()} <code>image/*</code> {@link android.content.ContentProvider#getStreamTypes(Uri, String) 845 ContentProvider.getStreamTypes()} 846 847 848 </p> 849 <pre> 850 { "image/jpeg", "image/png", "image/gif"} 851 </pre> 852 <p> 853 <code>.jpg</code> {@link android.content.ContentResolver#getStreamTypes(Uri, String) 854 ContentResolver.getStreamTypes()} <code>*\/jpeg</code> {@link android.content.ContentProvider#getStreamTypes(Uri, String) 855 ContentProvider.getStreamTypes()} 856 857 858 <pre> 859 {"image/jpeg"} 860 </pre> 861 <p> 862 MIME {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()} <code>null</code> 863 864 865 </p> 866 867 868 <!-- Implementing a Contract Class --> 869 <h2 id="ContractClass"> </h2> 870 <p> 871 <code>public final</code> URIMIME 872 URI 873 874 875 876 </p> 877 <p> 878 URI 879 Javadoc 880 Eclipse Javadoc 881 882 883 </p> 884 <p> 885 <code>.jar</code> 886 887 </p> 888 <p> 889 {@link android.provider.ContactsContract} 890 891 </p> 892 <h2 id="Permissions"> </h2> 893 <p> 894 Android <a href="{@docRoot}guide/topics/security/security.html"></a> 895 896 <a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a> 897 898 899 </p> 900 <ul> 901 <li> 902 903 904 </li> 905 <li> 906 {@link android.database.sqlite.SQLiteDatabase} 907 908 </li> 909 <li> 910 <em></em><em></em> 911 API 912 913 </li> 914 <li> 915 SQLite 916 917 918 919 920 921 </li> 922 </ul> 923 <p> 924 SQLite 925 926 927 </p> 928 <h3></h3> 929 <p> 930 931 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 932 <provider></a></code> 933 934 3 935 936 </p> 937 <p> 938 1 <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"> 939 <permission></a></code> 940 <code><a href="{@docRoot}guide/topics/manifest/permission-element.html#nm"> 941 android:name</a></code> Java 942 943 <code>com.example.app.provider.permission.READ_PROVIDER</code> 944 945 946 </p> 947 <p> 948 949 950 951 </p> 952 <dl> 953 <dt> 954 1 955 </dt> 956 <dd> 957 1 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 958 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> 959 android:permission</a></code> 960 961 962 </dd> 963 <dt> 964 965 </dt> 966 <dd> 967 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 968 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn"> 969 android:readPermission</a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn"> 970 android:writePermission</a></code> 971 972 973 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> 974 android:permission</a></code> 975 976 </dd> 977 <dt> 978 979 </dt> 980 <dd> 981 URI / <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 982 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html"> 983 <path-permission></a></code> URI 984 985 986 URI / 3 987 / 988 989 990 </dd> 991 <dt> 992 993 </dt> 994 <dd> 995 996 997 998 999 1000 1001 <p> 1002 1003 1004 URI 1005 URI 1006 1007 1008 1009 1010 </p> 1011 <p> 1012 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1013 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn"> 1014 android:grantUriPermissions</a></code> 1 <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"> 1015 <grant-uri-permission></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1016 <provider></a></code> 1017 1018 1019 1020 URI {@link android.content.Context#revokeUriPermission(Uri, int) 1021 Context.revokeUriPermission()} URI 1022 1023 1024 </p> 1025 <p> 1026 1027 <code>true</code> 1028 1029 1030 </p> 1031 <p> 1032 <code>false</code> <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"> 1033 <grant-uri-permission></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1034 <provider></a></code> 1035 1036 1 URI 1037 1038 </p> 1039 <p> 1040 {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} 1041 1042 {@link android.content.Intent#setFlags(int) setFlags()} 1043 1044 </p> 1045 <p> 1046 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn"> 1047 android:grantUriPermissions</a></code> <code>false</code> 1048 1049 </p> 1050 </dd> 1051 </dl> 1052 1053 1054 1055 <!-- The Provider Element --> 1056 <h2 id="ProviderElement"><provider> </h2> 1057 <p> 1058 {@link android.app.Activity} {@link android.app.Service} <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1059 <provider></a></code> {@link android.content.ContentProvider} 1060 1061 1062 Android 1063 1064 <dl> 1065 <dt> 1066 <a href="{@docRoot}guide/topics/manifest/provider-element.html#auth">{@code 1067 android:authorities}</a> 1068 1069 </dt> 1070 <dd> 1071 <a href="#ContentURI"> URI </a> 1072 1073 1074 </dd> 1075 <dt> 1076 <code> 1077 <a href="{@docRoot}guide/topics/manifest/provider-element.html#nm">android:name</a> 1078 </code> 1079 1080 </dt> 1081 <dd> 1082 {@link android.content.ContentProvider} <a href="#ContentProvider">ContentProvider </a> 1083 1084 1085 </dd> 1086 <dt> 1087 1088 </dt> 1089 <dd> 1090 1091 1092 <ul> 1093 <li> 1094 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn"> 1095 android:grantUriPermssions</a></code>: 1096 </li> 1097 <li> 1098 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> 1099 android:permission</a></code>: 1 / 1100 </li> 1101 <li> 1102 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn"> 1103 android:readPermission</a></code>: 1104 </li> 1105 <li> 1106 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn"> 1107 android:writePermission</a></code>: 1108 </li> 1109 </ul> 1110 <p> 1111 <a href="#Permissions"> </a> 1112 1113 1114 </p> 1115 </dd> 1116 <dt> 1117 1118 </dt> 1119 <dd> 1120 Android 1121 1122 <ul> 1123 <li> 1124 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#enabled"> 1125 android:enabled</a></code>: 1126 </li> 1127 <li> 1128 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#exported"> 1129 android:exported</a></code>: 1130 </li> 1131 <li> 1132 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#init"> 1133 android:initOrder</a></code>: 1134 1135 </li> 1136 <li> 1137 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#multi"> 1138 android:multiProcess</a></code>: 1139 1140 </li> 1141 <li> 1142 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#proc"> 1143 android:process</a></code>: 1144 1145 </li> 1146 <li> 1147 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#sync"> 1148 android:syncable</a></code>: 1149 1150 </li> 1151 </ul> 1152 <p> 1153 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1154 <provider></a></code> 1155 1156 1157 </p> 1158 </dd> 1159 <dt> 1160 1161 </dt> 1162 <dd> 1163 1164 <ul> 1165 <li> 1166 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#icon"> 1167 android:icon</a></code>: 1168 [] > [] > [] <em></em><em></em><em></em> 1169 1170 </li> 1171 <li> 1172 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#label"> 1173 android:label</a></code>: 1174 [] > [] > [] <em></em><em></em><em></em> 1175 1176 </li> 1177 </ul> 1178 <p> 1179 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1180 <provider></a></code> 1181 1182 </p> 1183 </dd> 1184 </dl> 1185 1186 <!-- Intent Access --> 1187 <h2 id="Intents"></h2> 1188 <p> 1189 {@link android.content.Intent} 1190 {@link android.content.ContentResolver} {@link android.content.ContentProvider} 1191 1192 UI 1193 1194 1195 UI 1196 1197 1198 </p> 1199 <p> 1200 1201 </p> 1202 <p> 1203 1204 1205 1206 1207 UI 1208 1209 </p> 1210 <p> 1211 1212 <a href="{@docRoot}guide/components/intents-filters.html"> </a> 1213 1214 </p> 1215