Android : Android .JPG is not saving to the SD card

on Tuesday, September 16, 2014


Im trying to capture user signature and store it under SD Card. App runs without any error.But the image file is not storing to the SD card.it only shows folder named sign.jpg. Images are missing .please help me to slove this. im new to android.. Here is my current code



@TargetApi(Build.VERSION_CODES.HONEYCOMB) public class CaptureSignature extends Activity {
LinearLayout mContent;
signature mSignature;
Button mClear, mGetSign;
public static String tempDir;
public int count = 1;
public String current = null;
private Bitmap mBitmap;
View mView;
File mypath;

private String uniqueId;
//private EditText yourName;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_signature);

tempDir = Environment.getExternalStorageDirectory() + "/"
+ getResources().getString(R.string.external_dir) + "/";
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir(
getResources().getString(R.string.external_dir),
Context.MODE_PRIVATE);

prepareDirectory();
uniqueId = getTodaysDate() + "_" + getCurrentTime() + "_"
+ Math.random();
current = uniqueId + ".png";
mypath = new File(directory, current);

mContent = (LinearLayout) findViewById(R.id.linearLayout);
mSignature = new signature(this, null);
mSignature.setBackgroundColor(Color.WHITE);
mContent.addView(mSignature, LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
mClear = (Button) findViewById(R.id.clear);
mGetSign = (Button) findViewById(R.id.getsign);
mGetSign.setEnabled(false);
// mCancel = (Button) findViewById(R.id.cancel);
mView = mContent;

/* final ActionBar aBar = getActionBar();
BitmapDrawable background = new BitmapDrawable (BitmapFactory.decodeResource(getResources(), R.drawable.top_header));
background.setTileModeX(android.graphics.Shader.TileMode.REPEAT);
aBar.setBackgroundDrawable(background);*/
//yourName = (EditText) findViewById(R.id.yourName);

mClear.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.v("log_tag", "Panel Cleared");
mSignature.clear();
mGetSign.setEnabled(false);
}
});

mGetSign.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.v("log_tag", "Panel Saved");
// boolean error = captureSignature();
// if (!error) {
mView.setDrawingCacheEnabled(true);
Bitmap mBmap = mSignature.save(mView);
// Bundle b = new Bundle();
//b.put("image", mBmap);
Intent intent = new Intent();
intent.putExtra("image", mBmap);
setResult(RESULT_OK, intent);
finish();
//}
}
});

// mCancel.setOnClickListener(new OnClickListener() {
// public void onClick(View v) {
// Log.v("log_tag", "Panel Canceled");
// Bundle b = new Bundle();
// b.putString("status", "cancel");
// Intent intent = new Intent();
// intent.putExtras(b);
// setResult(RESULT_OK, intent);
// finish();
// }
// });

}

@Override
protected void onDestroy() {
Log.w("GetSignature", "onDestory");
super.onDestroy();
}

private boolean captureSignature() {

boolean error = false;
String errorMessage = "";

// if (yourName.getText().toString().equalsIgnoreCase("")) {
// errorMessage = errorMessage + "Please enter your Name\n";
// error = true;
// }

if (error) {
Toast toast = Toast
.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP, 105, 50);
toast.show();
}

return error;
}

private String getTodaysDate() {

final Calendar c = Calendar.getInstance();
int todaysDate = (c.get(Calendar.YEAR) * 10000)
+ ((c.get(Calendar.MONTH) + 1) * 100)
+ (c.get(Calendar.DAY_OF_MONTH));
Log.w("DATE:", String.valueOf(todaysDate));
return (String.valueOf(todaysDate));

}

private String getCurrentTime() {

final Calendar c = Calendar.getInstance();
int currentTime = (c.get(Calendar.HOUR_OF_DAY) * 10000)
+ (c.get(Calendar.MINUTE) * 100) + (c.get(Calendar.SECOND));
Log.w("TIME:", String.valueOf(currentTime));
return (String.valueOf(currentTime));

}

private boolean prepareDirectory() {
try {
if (makedirs()) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(
this,
"Could not initiate File System.. Is Sdcard mounted properly?",
1000).show();
return false;
}
}

private boolean makedirs() {
File tempdir = new File(tempDir);
if (!tempdir.exists())
tempdir.mkdirs();

if (tempdir.isDirectory()) {
File[] files = tempdir.listFiles();
for (File file : files) {
if (!file.delete()) {
System.out.println("Failed to delete " + file);
}
}
}
return (tempdir.isDirectory());
}

public class signature extends View {
private static final float STROKE_WIDTH = 5f;
private static final float HALF_STROKE_WIDTH = STROKE_WIDTH / 2;
private Paint paint = new Paint();
private Path path = new Path();

private float lastTouchX;
private float lastTouchY;
private final RectF dirtyRect = new RectF();

public signature(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(STROKE_WIDTH);
}

public Bitmap save(View v) {
Log.v("log_tag", "Width: " + v.getWidth());
Log.v("log_tag", "Height: " + v.getHeight());
if (mBitmap == null) {
mBitmap = Bitmap.createBitmap(mContent.getWidth(),
mContent.getHeight(), Bitmap.Config.RGB_565);
}
Canvas canvas = new Canvas(mBitmap);
try {
FileOutputStream mFileOutStream = new FileOutputStream(mypath);

v.draw(canvas);
mBitmap.compress(Bitmap.CompressFormat.PNG, 90, mFileOutStream);

mFileOutStream.flush();
mFileOutStream.close();
String url = Images.Media.insertImage(getContentResolver(),
mBitmap, "title", null);
Log.v("log_tag", "url: " + url);
// In case you want to delete the file
// boolean deleted = mypath.delete();
// Log.v("log_tag","deleted: " + mypath.toString() + deleted);
// If you want to convert the image to string use base64
// converter

} catch (Exception e) {
Log.v("log_tag", e.toString());
}
return mBitmap;
}

public void clear() {
path.reset();
invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
mGetSign.setEnabled(true);

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(eventX, eventY);
lastTouchX = eventX;
lastTouchY = eventY;
return true;

case MotionEvent.ACTION_MOVE:

case MotionEvent.ACTION_UP:

resetDirtyRect(eventX, eventY);
int historySize = event.getHistorySize();
for (int i = 0; i < historySize; i++) {
float historicalX = event.getHistoricalX(i);
float historicalY = event.getHistoricalY(i);
expandDirtyRect(historicalX, historicalY);
path.lineTo(historicalX, historicalY);
}
path.lineTo(eventX, eventY);
break;

default:
debug("Ignored touch event: " + event.toString());
return false;
}

invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH),
(int) (dirtyRect.top - HALF_STROKE_WIDTH),
(int) (dirtyRect.right + HALF_STROKE_WIDTH),
(int) (dirtyRect.bottom + HALF_STROKE_WIDTH));

lastTouchX = eventX;
lastTouchY = eventY;

return true;
}

private void debug(String string) {
}

private void expandDirtyRect(float historicalX, float historicalY) {
if (historicalX < dirtyRect.left) {
dirtyRect.left = historicalX;
} else if (historicalX > dirtyRect.right) {
dirtyRect.right = historicalX;
}

if (historicalY < dirtyRect.top) {
dirtyRect.top = historicalY;
} else if (historicalY > dirtyRect.bottom) {
dirtyRect.bottom = historicalY;
}
}

private void resetDirtyRect(float eventX, float eventY) {
dirtyRect.left = Math.min(lastTouchX, eventX);
dirtyRect.right = Math.max(lastTouchX, eventX);
dirtyRect.top = Math.min(lastTouchY, eventY);
dirtyRect.bottom = Math.max(lastTouchY, eventY);
}
}
}

0 comments:

Post a Comment