///이 쓰기 파일
내가 메인 스레드에서 프로그램을 실행하려고하고 읽고 저장할 수 있습니다
편집 SD_Card합니다. 내가 생각은 AsyncTask를의 문제이다!
///
우선은 벌써 안드로이드 매니페스트
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
내가/SDCARD/블루투스MNT에서 원시 이미지 데이터를 읽으려고하고 처리를하고에 대한 사용자 권한을 추가 내부 sdcard에 쓰기 및 쓰기 경로는 mnt/sdcard/Bluetooth입니다.
이 프로그램은 내 안드로이드 에뮬레이터에서 실행하고 파일을 저장할 수 있습니다. 실제 전화를 실행할 때
그러나, 전화가 단지 내 파일을 읽을 수 있지만 파일을 저장할 수 없습니다 것으로 보인다.public class MainActivity extends Activity {
String filenameIn ="ardrone.raw";
File file = new File(Environment.getExternalStorageDirectory()+"/Bluetooth/", filenameIn);
String filename ="convertA.jpg";
File outputfile = new File(Environment.getExternalStorageDirectory() +"/Bluetooth/",filename);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myImageView = (ImageView)findViewById(R.id.imageView);
Toast.makeText(this, "search raw file", Toast.LENGTH_LONG).show();
new imageProcess().execute();
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Bitmap myBitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/Bluetooth/convertA.jpg");
myImageView.setImageBitmap(myBitmap);
if (file.exists()){
Toast.makeText(this, "InFile:)", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this, "InFile:(((((", Toast.LENGTH_LONG).show();
}
if (outputfile.exists()){
Toast.makeText(this, "outputfile:)", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this, "outputfile:(((((", Toast.LENGTH_LONG).show();
}
}
public class imageProcess extends AsyncTask<String, Integer, Boolean>{
Boolean check_point= false;
@Override
protected Boolean doInBackground(String... arg0) {
try {
receiveVideoRawData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
public void receiveVideoRawData() throws IOException{
byte[] buf_rcv = new byte[153600];
ByteArrayOutputStream ous = new ByteArrayOutputStream();
InputStream ios = new FileInputStream(file);
int read = 0;
while ((read = ios.read(buf_rcv)) != -1) {
ous.write(buf_rcv, 0, read);
}
ous.close();
ios.close();
ReadRawFileImage readMyRawData=new ReadRawFileImage();
image = readMyRawData.readUINT_RGBImage(buf_rcv);
//transfer data
OutputStream _outStream = new FileOutputStream(outputfile);
Bitmap pBitmap = image ;
pBitmap.compress(Bitmap.CompressFormat.JPEG, 90, _outStream);
_outStream.flush();
_outStream.close();
}
}
당신은 백그라운드 작업에서 이미지 파일을 저장하지만, 디코딩 작업을 즉시 시작 후 메인 스레드에서 이미지를 표시하는 시도를 얻을 참조 아래를 참조하시기 바랍니다. 백그라운드 저장이 읽으려고하는 지점까지 완료 했습니까? 경쟁 조건처럼 보입니다. – Devunwired