これがコードの抜粋です(問題を示すためだけに最小化しようとしました。これが、Uri がハードコードされている理由です。実際のコードは、ユーザーが連絡先で「共有」を行うと、連絡先アプリケーションから Uri を受け取ります)。
Uri uri = Uri.parse("content://com.android.contacts/contacts/as_vcard/0r1-47532F494753492F475349532F492F53492F3D533B49393B3D47532F");
try {
InputStream fis = getContentResolver().openInputStream(uri);
byte[] buffer = new byte[1024];
fis.read(buffer);
} catch (Exception e)
{
Log.d("zzz", e.getMessage());
}
このようなコードは、エミュレーターでのみ fis.read 操作で "java.io.IOException: read failed: EINVAL (Invalid argument)" をスローします (実際のデバイスでは正常に動作します)。Android 4.0.3 および 4.1.2 エミュレーターで試しました (両方とも失敗します)。
同様の質問を見ました (この問題の説明): vCard の連絡先データを読み取ろうとすると、Android の読み取りに失敗しました。
関連する (または関連しない) バグ: http://code.google.com/p/android/issues/detail?id=26480
エミュレーターで自動テストを実行していますが、この問題によりいくつかのテストを実行できません。
2 つの質問:
a) この動作を見たことがありますか?
b) この問題の回避策を知っていますか?