私は、同じデータベース構造と機能を必要とする多くのアプリケーションの基本コードを提供するライブラリプロジェクトを持っており、これを実装する最良の方法を探しています。 私の主な関心事は、実際には静的でない権限を与える方法です。そのため、ライブラリを使用するアプリケーションのパッケージ名で上書きすることができます。Androidプロジェクトのコンテンツプロバイダ
だから私は、私は私がリソース文字列から、またはcontext.getPackageName方法
ライブラリから権限を取得できるようになりますコンテキストを受け入れる静的メソッドに次の定数を変更する可能性が考えていたライブラリプロジェクトでプロジェクトモデル
public static final class Questions implements BaseColumns {
// public static final Uri CONTENT_URI =
// Uri.parse("content://" + Config.AUTHORITY + "/questions");
// use getAuthority instead which in turn will just get the package ae. Will this work?
public static Uri getContentUri(Context c){
return Uri.parse("content://" + getAuthority(c) + "/questions");
}
...
}
public static String getAuthority(Context c){
return c.getPackageName + ".QuizProvider";
}
ライブラリプロジェクトコンテンツプロバイダ
public class QuizProvider extends ContentProvider {
// private SQLiteDatabase mDB;
private static final String TAG = "MyLog";
private static final String DATABASE_NAME = "quiz.db";
private static final int DATABASE_VERSION = 1;
private static final int QUESTIONS = 1;
private static final int QUESTION_ID = 2;
private static final UriMatcher URI_MATCHER = new UriMatcher(
UriMatcher.NO_MATCH);
private static Map<String, String> QUESTION_LIST_PROJECTION_MAP = null;
private DatabaseHelper mOpenHelper;
/**
* This class helps open, create, and upgrade the database file.
*/
private static class DatabaseHelper extends SQLiteOpenHelper {
@Override
public Uri insert(Uri uri, ContentValues values) {
int match = URI_MATCHER.match(uri);
switch (match) {
case QUESTIONS:
return insertQuestion(values);
...
}
...
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
switch (URI_MATCHER.match(uri)) {
case QUESTIONS:
qb.setTables(QuizModel.Questions.TABLE_NAME);
qb.setProjectionMap(QUESTION_LIST_PROJECTION_MAP);
break;
...
}
//How do I change this?
static {
URI_MATCHER.addURI(Config.AUTHORITY, QuizModel.Questions.TABLE_NAME, QUESTIONS);
...
QUESTION_LIST_PROJECTION_MAP = new HashMap<String, String>();
...
}
1)私は本当にstatiを理解していませんc {URI_MATCHER.addUR}宣言を宣言し、これをどのように変換できるかを理解するのに苦労していますか?
2)これは、どのアプリでも機能全体を再利用できる最良の方法ですか?何が良いのだろうか?
同じ質問をお探しの方には、この[Stackoverflow comment](http://stackoverflow.com/questions/16268119/dynamically-set-the-authority-of-a- contentprovider#comment23303216_16270100)。 – Sufian