在清单中使用min-sdk标记时,为什么sqlite数据库只能在sdcard上找到?

1 android android-manifest

我在一周前在Android开发列表上发布了这个问题,但到目前为止还没有回复.

我遇到了一个奇怪的问题.我使用位于/ sdcard /上的数据库,并且出于某种原因,每当我添加<uses-sdk android:minSdkVersion="8" />到清单时,sqlite都会将db打开为只读.它也有点怪异.下面的代码打开db并检查db是否为readonly,返回false:

db = SQLiteDatabase.openDatabase("/sdcard/test.db3", null, SQLiteDatabase.OPEN_READWRITE); Log.i(LOGTAG, "Database status: " + db.isReadOnly());

但如果我尝试写任何数据,它会炸弹:

INFO/Database(6576): sqlite returned: error code = 8, msg = prepared statement aborts at 24: [INSERT INTO tags(type_id , tag) VALUES(?, ?);] ERROR/Database(6576): Error inserting type_id =1 tag=TestTag ERROR/Database(6576): android.database.sqlite.SQLiteException: error code 8: attempt to write a readonly database

如果我从清单中删除uses-sdk标记,一切正常.我在模拟器,运行2.2.1的NexusOne和Galaxy Tab上验证了这种行为.这是一个已知的问题?有解决方法吗?

任何帮助将不胜感激.

Com*_*are 6

你需要这个WRITE_EXTERNAL_STORAGE许可.

此外,永远不要永远不会永远不会像您一样硬编码外部存储路径.您的代码将在Android 2.2设备上中断.您的代码将在其他设备上中断.请使用Environment.getExternalStorageDirectory().