CM 10.1 を搭載した Galaxy S3 では、BitmapHelper で nullpointer 例外が発生します。
bm = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, オプション);
その後、私の UploadPhotoActivity は次の場所で失敗します:
try {
photo = BitmapHelper.readBitmap(this, cameraPicUri);
if (photo != null) {
photo = BitmapHelper.shrinkBitmap(photo, 600, rotateXDegrees);
thumbnail = BitmapHelper.shrinkBitmap(photo, 100);
ImageView imageView = (ImageView) findViewById(R.id.sustainable_action_photo);
imageView.setImageBitmap(photo);
} else {
Log.e(TAG,"IMAGE ERROR 1");
}
} catch (Exception e) {
Log.e(TAG,"IMAGE ERROR 2");
e.printStackTrace();
}
2 番目のログ (画像エラー 2)。数回試行した後、カメラが壊れ、「カメラに接続できませんでした」というエラーが表示されました。
nexus 7 でテストしたところ、問題なく動作しました。
編集:これに絞り込みました:
fileDescriptor = context.getContentResolver().openAssetFileDescriptor(selectedImage, "r");
selectedImageにはこれが含まれていますが:
file:///storage/emulated/0/DCIM/Camera/IMG_20131023_183343.jpg
fileDescriptor は FileNotFoundException を返します。ファイル システムを確認しましたが、画像がこの場所に保存されていません。TakePhotoActivity の cameraPicUri が、存在しない画像を指しています。現在、どこが悪いのか確認中です。
Edit2: エラーを見つけました: デバイスは Samsung であり、Samsung デバイスであることをアプリに伝えるため、Samsung 固有の修正が適用されます。ただし、Cyanogenmod はこれらの修正を必要とせず、最終的にコードが壊れます。取り外したら
(manufacturer.contains("samsung")) &&
できます。これはカスタム ROM であるため、もちろんそれを計画することはできません。デバイスが cyanogenmod を実行しているかどうかを検出し、これをコードに含める方法を見つけようとしています。
素敵なカメラ修理をありがとう!
Edit3:コードを次のように変更して、Galaxy S3 の Cyanogenmod で実行するように修正しました
。変。
if (getPackageManager().hasSystemFeature("com.cyanogenmod.android") || (!(manufacturer.contains("samsung")) && !(manufacturer.contains("sony")) && !(manufacturer.contains(") lge"))))