package com.diandi.demo.ui.activity; import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import com.diandi.demo.R; import com.diandi.demo.model.User; import com.diandi.demo.model.diandi.DianDi; import com.diandi.demo.util.CacheUtils; import com.diandi.demo.util.L; import com.diandi.demo.util.OverridePendingUtil; import com.diandi.demo.widget.HeaderLayout; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import cn.bmob.v3.BmobUser; import cn.bmob.v3.datatype.BmobFile; import cn.bmob.v3.listener.SaveListener; import cn.bmob.v3.listener.UploadFileListener; /** * ******************************************************************************* * ********* Author : klob(kloblic@gmail.com) . * ********* Date : 2014-11-29 . * ********* Time : 11:46 . * ********* Project name : Diandi1.18 . * ********* Version : 1.0 * ********* Copyright @ 2014, klob, All Rights Reserved * ******************************************************************************* */ public class NewDiandiActivity extends ActivityBase implements OnClickListener { private static final int REQUEST_CODE_ALBUM = 1; private static final int REQUEST_CODE_CAMERA = 2; EditText content; LinearLayout openLayout; LinearLayout takeLayout; ImageView albumPic; ImageView takePic; String dateTime; String targeturl = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); findView(); initView(); } protected void findView() { setContentView(R.layout.activity_new_diandi); content = (EditText) findViewById(R.id.edit_content); openLayout = (LinearLayout) findViewById(R.id.open_layout); takeLayout = (LinearLayout) findViewById(R.id.take_layout); albumPic = (ImageView) findViewById(R.id.open_pic); takePic = (ImageView) findViewById(R.id.take_pic); } protected void initView() { this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); initTopBarForBoth("记下点滴", R.drawable.base_action_bar_true_bg_selector, new HeaderLayout.onRightImageButtonClickListener() { @Override public void onClick() { String commitContent = content.getText().toString().trim(); if (TextUtils.isEmpty(commitContent)) { ShowToast("内容不能为空"); return; } if (targeturl == null) { publish(commitContent, null, true); } else { publish(commitContent); } finish(); OverridePendingUtil.out(NewDiandiActivity.this); } }); bindEvent(); } protected void bindEvent() { openLayout.setOnClickListener(this); takeLayout.setOnClickListener(this); albumPic.setOnClickListener(this); takePic.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.open_layout: Date date1 = new Date(System.currentTimeMillis()); dateTime = date1.getTime() + ""; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, REQUEST_CODE_ALBUM); break; case R.id.take_layout: Date date = new Date(System.currentTimeMillis()); dateTime = date.getTime() + ""; File f = new File(CacheUtils.getCacheDirectory(this, true, "pic") + dateTime); if (f.exists()) { f.delete(); } try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } Uri uri = Uri.fromFile(f); Log.e("uri", uri + ""); Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); camera.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(camera, REQUEST_CODE_CAMERA); break; default: break; } } /* * 发表带图片 */ private void publish(final String commitContent) { final BmobFile figureFile = new BmobFile(new File(targeturl)); figureFile.upload(this, new UploadFileListener() { @Override public void onSuccess() { L.i(TAG, "上传文件成功。" + figureFile.getFileUrl(mContext)); publish(commitContent, figureFile, false); } @Override public void onProgress(Integer arg0) { } @Override public void onFailure(int arg0, String arg1) { L.i(TAG, "上传文件失败。" + arg1); } }); } private void publish(final String commitContent, final BmobFile figureFile, boolean isPrivate) { User user = BmobUser.getCurrentUser(this, User.class); final DianDi qiangYu = new DianDi(); if (figureFile != null) { qiangYu.setContentfigureurl(figureFile); } qiangYu.setAuthor(user); qiangYu.setContent(commitContent); qiangYu.setLove(0); qiangYu.setHate(0); qiangYu.setShare(0); qiangYu.setComment(0); qiangYu.setPass(true); qiangYu.save(this, new SaveListener() { @Override public void onSuccess() { ShowToast("发表成功!"); L.i(TAG, "创建成功。"); setResult(RESULT_OK); } @Override public void onFailure(int arg0, String arg1) { // TODO Auto-generated method stub ShowToast("发表失败!yg" + arg1); L.i(TAG, "创建失败。" + arg1); } }); } @SuppressLint("NewApi") @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); L.i(TAG, "get album:"); if (resultCode == RESULT_OK) { switch (requestCode) { case REQUEST_CODE_ALBUM: String fileName = null; if (data != null) { Uri originalUri = data.getData(); ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(originalUri, null, null, null, null); if (cursor.moveToFirst()) { do { fileName = cursor.getString(cursor.getColumnIndex("_data")); L.i(TAG, "get album:" + fileName); } while (cursor.moveToNext()); } Bitmap bitmap = compressImageFromFile(fileName); targeturl = saveToSdCard(bitmap); albumPic.setBackgroundDrawable(new BitmapDrawable(bitmap)); takeLayout.setVisibility(View.GONE); } break; case REQUEST_CODE_CAMERA: String files = CacheUtils.getCacheDirectory(this, true, "pic") + dateTime; File file = new File(files); if (file.exists()) { Bitmap bitmap = compressImageFromFile(files); targeturl = saveToSdCard(bitmap); takePic.setBackgroundDrawable(new BitmapDrawable(bitmap)); openLayout.setVisibility(View.GONE); } else { } break; default: break; } } } private Bitmap compressImageFromFile(String srcPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); newOpts.inJustDecodeBounds = true;//只读边,不读内容 Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts); newOpts.inJustDecodeBounds = false; int w = newOpts.outWidth; int h = newOpts.outHeight; float hh = 800f;// float ww = 480f;// int be = 1; if (w > h && w > ww) { be = (int) (newOpts.outWidth / ww); } else if (w < h && h > hh) { be = (int) (newOpts.outHeight / hh); } if (be <= 0) be = 1; newOpts.inSampleSize = be;//设置采样率 newOpts.inPreferredConfig = Config.ARGB_8888;//该模式是默认的,可不设 newOpts.inPurgeable = true;// 同时设置才会有效 newOpts.inInputShareable = true;//。当系统内存不够时候图片自动被回收 bitmap = BitmapFactory.decodeFile(srcPath, newOpts); // return compressBmpFromBmp(bitmap);//原来的方法调用了这个方法企图进行二次压缩 //其实是无效的,大家尽管尝试 return bitmap; } public String saveToSdCard(Bitmap bitmap) { String files = CacheUtils.getCacheDirectory(this, true, "pic") + dateTime + "_11.png"; File file = new File(files); try { FileOutputStream out = new FileOutputStream(file); if (bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out)) { out.flush(); out.close(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } L.i(TAG, file.getAbsolutePath()); return file.getAbsolutePath(); } }