http://developer.android.com/guide/topics/providers/content-providers.html
http://developer.android.com/guide/topics/providers/content-provider-basics.html
http://developer.android.com/guide/topics/providers/content-provider-creating.html
- URI Matcher에서 * 은 any characters 에 # 은 any numbers 에 mapping 된다.
- ContentProvider 의 함수들은 multiple thread 에서 한번에 불릴 수 있다. 그래서 provider 가 구현하는 함수들은 반드시 thread-safe 해야 한다.
- ContentProvider 의 onCreate() 는 긴 작업을 해서는 안된다.
- query 결과로 전달되는 Cursor 는 반드시 Database Cursor 일 필요는 없다. MatrixCursor 와 같은 Cursor 의 subclass 를 사용하여, 내용을 채워 return 을 해도 된다. MatrixCursor 는 각 row 가 Object array 이다. addRow() 를 통해 새로운 row 를 추가할 수 있다.
- Provider 에서 invalid content URI 가 올 경우 IllegalArgumentException 을 날려주는 것이 좋다.
- Provider 에서 File 을 제공할때는 getStreamTypes() 도 구현해주어야 한다. 이녀석은 String array 를 return 해준다. 예를 들어 jpeg, png, gif 를 제공한다면 { "image/jpeg", "image/png", "image/gif" } 로 return 해주면 된다.
- DatabaseOpenHelper 의 onCreate() 는 실제 Database operation 이 있을 때 최초로 한번 불린다.
- MIME type 의 subType 은 vnd.[packageName].[tableName] 을 주로 사용한다.
- External storage 에 있는 file 은 ContentProvider 로 제공할 필요가 없다. 다른 API 로도 충분히 접속 가능하기 때문이다.
- Provider를 통해 Internal Storage 에 생성 및 저장했다는 것은 다른 app 들이 모두 접근할 수 있다는 말이다. 즉 Data 들이 secure 한 것은 아니다. world-readable or world-writeable 권한이 주어지기 때문이다.
- provider 에 permission 을 줄 수 있는데, provider 전체, table 일부, record 일부 등에 제약을 줄 수 있다. android:permission 은 일반적인 read, write 전부에 대한 permission. android:wrtiePermission, android:readPermission 으로 개별 permission 을 줄 수도 있다. 이 둘은 android:permission 보다 우선한다. <path-permission> 을 통해서 Path-level permission 을 줄 수 있다.
- provider 의 permission 은 temporary permission 도 있다. temp permission 은 android:grantUriPermissions 를 주고 <grant-uri-permission> 을 <provider> 의 child 로 넣어주면 된다. temp permission 을 사용할때는 Context.revokeUriPermission() 을 call 해야 한다.android:grantUriPermissions = true 가 되면, provider-level 로 temp permission 이 주어진다. 만약 android:grantUriPermissions = false 라면 반드시 <grant-uri-permission> child element 를 설정해주어야 한다. temp permission 을 application 에 주기 위해서는 FLAG_GRANT_READ_URI_PERMISSION 또는 FLAG_GRANT_WRITE_URI_PERMISSION 을 주어야 한다. ( 2개도 가능 )
- provider 의 attribute 에는 initOrder 는 같은 process 에서 provider 의 initOrder 를 명시. multiProcess 는 client 의 process 에서 띄울 것인지, syncable 은 server data 와 sync 시킬 것인지를 결정.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] 코드로 resource language mapping 변경하기. (0) | 2012.06.07 |
---|---|
[Android/안드로이드] ActionBar 고급정보들. (5) | 2012.05.30 |
[android] Notification 고급 정보 (0) | 2012.05.26 |
[Android/안드로이드] Toast (0) | 2012.05.25 |
[Android/안드로이드] Dialog 고급정보. (0) | 2012.05.25 |
댓글