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"> Intent </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 79 </a> 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 99 Android 100 101 {@link android.content.ContentProvider} 102 103 Activity 104 105 </p> 106 <p> 107 108 API 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> 120 121 <ul> 122 <li></li> 123 <li></li> 124 <li></li> 125 </ul> 126 <p> 127 128 <em></em> SQLite 129 </p> 130 </li> 131 <li> 132 133 <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"> 134 </a> 135 </li> 136 </ol> 137 <p> 138 139 </p> 140 <ol> 141 <li> 142 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 161 SQLite 162 163 Android <a href="#DataStorage"> 164 </a> 165 </dd> 166 </dl> 167 </li> 168 <li> 169 {@link android.content.ContentProvider} 170 171 Android 172 <a href="#ContentProvider"> ContentProvider </a> 173 </li> 174 <li> 175 URI 176 Intent Intent Extra 177 178 179 URI <a href="#ContentURI"> URI</a> 180 181 182 Intent <a href="#Intents"> Intent </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 SQLite APIAndroid 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"></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.provider.BaseColumns#_ID BaseColumns._ID} {@link android.widget.ListView} <code>_ID</code> 242 243 244 245 246 </li> 247 <li> 248 249 250 {@link android.content.ContentResolver} 251 252 </li> 253 <li> 254 (BLOB) 255 BLOB <a href="http://code.google.com/p/protobuf"></a> <a href="http://www.json.org">JSON </a> 256 257 258 <p> 259 BLOB <em></em> BLOB MIME 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 276 {@link android.content.ContentProvider} URI 277 278 </p> 279 <p> 280 281 <a href="{@docRoot}guide/topics/providers/content-provider-basics.html"></a> URI 282 283 </p> 284 <h3></h3> 285 <p> 286 Android Internet 287 288 Android 289 290 Android 291 <code>com.example.<appname></code> <code>com.example.<appname>.provider</code> 292 293 </p> 294 <h3></h3> 295 <p> 296 URI 297 <em>table1</em> 298 <em>table2</em> 299 URI 300 <code>com.example.<appname>.provider/table1</code> 301 <code>com.example.<appname>.provider/table2</code> 302 303 </p> 304 <h3> URI ID</h3> 305 <p> 306 ID URI ID <code>_ID</code> 307 308 309 310 </p> 311 <p> 312 {@link android.widget.CursorAdapter} {@link android.widget.ListView} {@link android.database.Cursor} 313 314 315 {@link android.widget.CursorAdapter} 316 {@link android.database.Cursor} <code>_ID</code> 317 </p> 318 <p> 319 UI 320 321 {@link android.widget.ListView} {@link android.database.Cursor} <code>_ID</code> URI 322 323 324 </p> 325 <h3> URI </h3> 326 <p> 327 URI API {@link android.content.UriMatcher} URI 328 329 <code>switch</code> 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 <code>com.example.app.provider</code> URI 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> 354 <code>dataset1</code> 355 </li> 356 <li> 357 <code>content://com.example.app.provider/table2/dataset2</code> 358 <code>dataset2</code> 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>content://com.example.app.provider/table3/1</code> <code>table3</code> <code>1</code> URI 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> 384 <code>dataset2</code> URI <code>table1</code> 385 <code>table3</code> URI 386 </dd> 387 <dt> 388 <code>content://com.example.app.provider/table3/#</code> 389 <code>table3</code> URI <code>content://com.example.app.provider/table3/6</code> 390 <code>6</code> URI 391 392 </dt> 393 </dl> 394 <p> 395 {@link android.content.UriMatcher} 396 URI URI URI 397 <code>content://<authority>/<path></code> URI 398 <code>content://<authority>/<path>/<id></code> 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> 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} 473 {@link android.net.Uri.Builder} 474 {@link android.net.Uri} 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} 482 {@link android.content.ContentProvider} 483 484 </p> 485 <h3 id="RequiredAccess"></h3> 486 <p> 487 {@link android.content.ContentProvider} 488 489 {@link android.content.ContentProvider#onCreate() onCreate()} 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 538 {@link android.content.ContentResolver} 539 </dd> 540 </dl> 541 <p> 542 543 {@link android.content.ContentResolver} 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 566 {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} 0 567 568 </li> 569 </ul> 570 <h3 id="Query"> query() </h3> 571 <p> 572 573 {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) 574 ContentProvider.query()} {@link android.database.Cursor} {@link java.lang.Exception} 575 SQLite {@link android.database.sqlite.SQLiteDatabase} 576 <code>query()</code> {@link android.database.Cursor} 577 578 {@link android.database.Cursor} 579 {@link android.database.Cursor#getCount()} 0 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 612 {@link android.content.ContentUris#withAppendedId(Uri, long) withAppendedId()} URI <code>_ID</code> 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()} 627 {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} {@link android.content.ContentValues} 628 {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} 629 {@link android.content.ContentProvider#query(Uri, String[], String, String[], String) 630 ContentProvider.query()} <code>selection</code> <code>selectionArgs</code> 631 632 </p> 633 <h3 id="OnCreate"> onCreate() </h3> 634 <p> 635 Android {@link android.content.ContentProvider#onCreate() 636 onCreate()} 637 638 639 {@link android.content.ContentProvider#onCreate() onCreate()} 640 641 642 </p> 643 <p> 644 SQLite 645 {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} {@link android.database.sqlite.SQLiteOpenHelper} SQL 646 647 {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase 648 getWritableDatabase()} 649 {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) 650 SQLiteOpenHelper.onCreate()} 651 652 </p> 653 <p> 654 655 {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} 656 {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) 657 SQLiteOpenHelper.onCreate()} 658 {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} 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 710 {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase) 711 SQLiteOpenHelper.onCreate()} 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 754 </p> 755 <dl> 756 <dt> 757 {@link android.content.ContentProvider#getType(Uri) getType()} 758 </dt> 759 <dd> 760 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 772 {@link java.lang.String} 773 URI {@link android.net.Uri} URI URI 774 775 776 </p> 777 <p> 778 HTML JPEG 779 {@link android.content.ContentProvider#getType(Uri) getType()} 780 MIME 781 <a href="http://www.iana.org/assignments/media-types/index.htm">IANA MIME Media Types</a> 782 783 </p> 784 <p> 785 URI 786 {@link android.content.ContentProvider#getType(Uri) getType()} Android MIME 787 MIME 788 </p> 789 <ul> 790 <li> 791 <code>vnd</code> 792 </li> 793 <li> 794 795 <ul> 796 <li> 797 URI <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> 809 <code><type></code> URI 810 Android <code><name></code> 811 URI <code><type></code> 812 813 814 </p> 815 816 </li> 817 </ul> 818 <p> 819 820 <code>com.example.app.provider</code> 821 <code>table1</code> <code>table1</code> MIME 822 </p> 823 <pre> 824 vnd.android.cursor.<strong>dir</strong>/vnd.com.example.provider.table1 825 </pre> 826 <p> 827 <code>table1</code> 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 835 {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()} 836 URI MIME {@link java.lang.String} MIME MIME MIME 837 838 839 </p> 840 <p> 841 <code>.jpg</code> 842 <code>.png</code> <code>.gif</code> 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> 854 {@link android.content.ContentResolver#getStreamTypes(Uri, String) 855 ContentResolver.getStreamTypes()} <code>*\/jpeg</code>{@link android.content.ContentProvider#getStreamTypes(Uri, String) 856 ContentProvider.getStreamTypes()} 857 858 <pre> 859 {"image/jpeg"} 860 </pre> 861 <p> 862 MIME 863 {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()} 864 <code>null</code> 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 881 Eclipse Javadoc 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 <a href="{@docRoot}guide/topics/security/security.html"></a> Android 895 896 <a href="{@docRoot}guide/topics/data/data-storage.html"></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 932 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 933 <provider></a></code> 934 935 936 </p> 937 <p> 938 939 <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"> 940 <permission></a></code> 941 <code><a href="{@docRoot}guide/topics/manifest/permission-element.html#nm"> 942 android:name</a></code> Java 943 944 <code>com.example.app.provider.permission.READ_PROVIDER</code> 945 946 </p> 947 <p> 948 949 950 951 </p> 952 <dl> 953 <dt> 954 955 </dt> 956 <dd> 957 958 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 959 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> 960 android:permission</a></code> 961 962 </dd> 963 <dt> 964 965 </dt> 966 <dd> 967 968 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 969 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn"> 970 android:readPermission</a></code> 971 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn"> 972 android:writePermission</a></code> 973 974 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn"> 975 android:permission</a></code> 976 </dd> 977 <dt> 978 979 </dt> 980 <dd> 981 URI / 982 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 983 <provider></a></code> <code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html"> 984 <path-permission></a></code> URI 985 986 URI/ 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 Intent URI 1006 1007 1008 1009 1010 </p> 1011 <p> 1012 1013 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1014 <provider></a></code> 1015 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn"> 1016 android:grantUriPermissions</a></code> 1017 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1018 <provider></a></code> 1019 <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"> 1020 <grant-uri-permission></a></code> URI URI 1021 {@link android.content.Context#revokeUriPermission(Uri, int) 1022 Context.revokeUriPermission()} 1023 1024 </p> 1025 <p> 1026 1027 <code>true</code> 1028 1029 1030 </p> 1031 <p> 1032 <code>false</code> 1033 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1034 <provider></a></code> 1035 <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"> 1036 <grant-uri-permission></a></code> URI 1037 1038 </p> 1039 <p> 1040 Intent 1041 {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} / 1042 {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} {@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> 1048 <code>false</code> 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} 1059 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1060 <provider></a></code> 1061 {@link android.content.ContentProvider} 1062 Android 1063 1064 <dl> 1065 <dt> 1066 1067 (<a href="{@docRoot}guide/topics/manifest/provider-element.html#auth">{@code 1068 android:authorities}</a>) 1069 </dt> 1070 <dd> 1071 <a href="#ContentURI"> URI</a> 1072 1073 1074 </dd> 1075 <dt> 1076 1077 (<code> 1078 <a href="{@docRoot}guide/topics/manifest/provider-element.html#nm">android:name</a> 1079 </code>) 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>/ 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 1154 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1155 <provider></a></code> 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> Drawable 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 1180 <code><a href="{@docRoot}guide/topics/manifest/provider-element.html"> 1181 <provider></a></code> 1182 </p> 1183 </dd> 1184 </dl> 1185 1186 <!-- Intent Access --> 1187 <h2 id="Intents">Intent </h2> 1188 <p> 1189 {@link android.content.Intent} 1190 {@link android.content.ContentResolver} 1191 {@link android.content.ContentProvider} Activity Intent Activity 1192 Activity UI Intent Activity 1193 1194 1195 Intent Activity UI extra 1196 1197 1198 </p> 1199 <p> 1200 1201 </p> 1202 <p> 1203 Intent 1204 1205 1206 Intent 1207 UI Intent 1208 1209 </p> 1210 <p> 1211 Intent Intent 1212 <a href="{@docRoot}guide/components/intents-filters.html"> Intent Intent </a> Intent 1213 1214 </p> 1215