package cn.flightfeather.thirdapp.activity; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.content.FileProvider; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.ping.greendao.gen.MediafileDao; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import cn.flightfeather.thirdapp.CommonApplication; import cn.flightfeather.thirdapp.R; import cn.flightfeather.thirdapp.bean.entity.Mediafile; import cn.flightfeather.thirdapp.bean.entity.Subtask; import cn.flightfeather.thirdapp.bean.vo.GitlistVo; import cn.flightfeather.thirdapp.task.DownloadAndSetImageTask; import cn.flightfeather.thirdapp.task.SetImageTask; import cn.flightfeather.thirdapp.util.DateFormatter; import cn.flightfeather.thirdapp.util.UUIDGenerator; public class GitDetailActivity extends AppCompatActivity { private TextView tv_gitName; private TextView tv_gitDes; private TextView tv_gitTime; private ImageView iv_photo1; private ImageView iv_photo2; private ImageView iv_photo3; private List ivPhotoList; private LinearLayout ll_shareAll; private List mediaFileList; private GitlistVo gitlistVoCurrent; private Subtask subTaskSelected; private MediafileDao mediafileDao; private CommonApplication application; private final int TAKE_GIT_PHOTO =10; private final int PICK_GIT_PHOTO =11; private final int VIEW_GIT_PHOTO =12; private String inspectionGuid =""; private String scenceAddress = ""; private File fileCurrent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_git_detail); application = (CommonApplication) getApplication(); initUI(); initData(); } //初始化界面 private void initUI() { getSupportActionBar().setTitle("技防措施详情"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); tv_gitName = (TextView) findViewById(R.id.tv_git_name); tv_gitTime = (TextView) findViewById(R.id.tv_git_time); tv_gitDes = (TextView) findViewById(R.id.tv_git_des); iv_photo1 = (ImageView) findViewById(R.id.iv_git_photo1); iv_photo2 = (ImageView) findViewById(R.id.iv_git_photo2); iv_photo3 = (ImageView) findViewById(R.id.iv_git_photo3); ll_shareAll = (LinearLayout) findViewById(R.id.ll_share_all_git); ll_shareAll.setVisibility(View.GONE); } //初始化数据 private void initData() { Intent intent = getIntent(); gitlistVoCurrent = (GitlistVo) intent.getSerializableExtra("gitlistVo"); subTaskSelected = (Subtask) intent.getSerializableExtra("subTask"); inspectionGuid = intent.getStringExtra("inspectionGuid"); scenceAddress = intent.getStringExtra("scenseAddress"); if (gitlistVoCurrent!=null&&subTaskSelected!=null){ tv_gitName.setText(gitlistVoCurrent.getName()); tv_gitDes.setText(gitlistVoCurrent.getDesc()); tv_gitTime.setText(DateFormatter.dateTimeFormat.format(gitlistVoCurrent.getCreatedate())); ivPhotoList = new ArrayList<>(); ivPhotoList.add(iv_photo1); ivPhotoList.add(iv_photo2); ivPhotoList.add(iv_photo3); mediafileDao = application.getDaoSession().getMediafileDao(); mediaFileList = new ArrayList<>(); mediaFileList.addAll(gitlistVoCurrent.getMediafileList()); mediaFileList.addAll(mediafileDao.queryBuilder().where(MediafileDao.Properties.Businessguid.eq(gitlistVoCurrent.getGuid())).where(MediafileDao.Properties.Remark.eq("未上传")).list()); loadImage(mediaFileList); }else { Toast.makeText(this, "获取数据失败", Toast.LENGTH_SHORT).show(); } } //加载并显示图片 private void loadImage(List mediafileList){ if (mediafileList!=null&&mediafileList.size()>0){ for (int i = 0;i getFilesFromMediaFile(List mediafiles){ List files = new ArrayList<>(); for (Mediafile m : mediafiles) { File file = new File(Environment.getExternalStorageDirectory(), (m.getPath() + m.getDescription())); files.add(file); } return files; } //刷新图片和点击事件 private void refreshImageListener(boolean resetImage){ if (mediaFileList.size()>0){ ivPhotoList.get(mediaFileList.size()-1).setImageResource(R.drawable.icon_add_photo_blank); } for (int i = 0;i= Build.VERSION_CODES.N) { uri = FileProvider.getUriForFile(GitDetailActivity.this, "cn.flightfeather.thirdapp.fileProvider", path); } else { uri = Uri.fromFile(path); } intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); fileCurrent = path; startActivityForResult(intent, type); }else { Toast.makeText(application, "错误,获取subtask失败", Toast.LENGTH_SHORT).show(); } } } private File getNewGitFile(){ File newFile = null; if (subTaskSelected!=null){ java.util.Calendar calendar = java.util.Calendar.getInstance(); calendar.setTime(subTaskSelected.getExecutionstarttime()); String parent = "FlightFeather/Photo/" + subTaskSelected.getDistrictname() + "/" + calendar.get(java.util.Calendar.YEAR) + "年" + (calendar.get(java.util.Calendar.MONTH) + 1) + "月/" + (calendar.get(java.util.Calendar.MONTH) + 1) + "月" + calendar.get(java.util.Calendar.DAY_OF_MONTH) + "日/" + subTaskSelected.getScensename() + "/技防措施/"; String fileName = gitlistVoCurrent.getName()+ " "+ UUIDGenerator.generateUUID(4)+".jpg"; newFile = new File(Environment.getExternalStorageDirectory(), (parent + fileName)); newFile.getParentFile().mkdirs(); }else { Toast.makeText(application, "无subtask", Toast.LENGTH_SHORT).show(); } return newFile; } //跳转到photoviewer private View.OnClickListener showPhotoClicker(final List files, final int position, final List mediafiles){ View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(GitDetailActivity.this,PhotoViewerActivity.class); intent.putExtra("position",position); intent.putExtra("type",PhotoViewerActivity.GIT_PHOTO); intent.putExtra(PhotoViewerActivity.PARA_MEDIAS, (Serializable) mediafiles); intent.putExtra("deletable",true); intent.putExtra(PhotoViewerActivity.PARA_FILES, (Serializable) files); startActivityForResult(intent,VIEW_GIT_PHOTO); } }; return listener; } private Mediafile newMediaFile(File file){ Mediafile mediaFile = new Mediafile(); mediaFile.setGuid(UUIDGenerator.generate16ShortUUID()); mediaFile.setIguid(inspectionGuid); mediaFile.setBusinessguid(gitlistVoCurrent.getGuid()); mediaFile.setAddress(scenceAddress); mediaFile.setFiletype(1); mediaFile.setBusinesstype("技防措施"); mediaFile.setBusinesstypeid(intToByte(2)); String path = file.getParent().substring(20)+"/"; mediaFile.setPath(path); mediaFile.setDescription(file.getName()); mediaFile.setSavetime(new Date()); String exetension1 =subTaskSelected.getCitycode()+"/"+subTaskSelected.getDistrictcode()+"/"+ DateFormatter.dateFormat2.format(subTaskSelected.getExecutionstarttime())+"/"+subTaskSelected.getScenseid()+"/技防措施/"; mediaFile.setExtension1(exetension1); mediaFile.setRemark("未上传"); return mediaFile; } public static byte intToByte(int x) { return (byte) x; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; default: break; } return super.onOptionsItemSelected(item); } //复制文件 public static void copyfile(File oldfile, File newfile) throws IOException { FileInputStream ins = new FileInputStream(oldfile); FileOutputStream out = new FileOutputStream(newfile); //自定义缓冲对象 byte[] b = new byte[1024]; int n = 0; while ((n = ins.read(b)) != -1) { out.write(b, 0, b.length); } ins.close(); out.close(); System.out.println("copy success"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode ==TAKE_GIT_PHOTO&&resultCode ==RESULT_OK){ Mediafile mediafile = newMediaFile(fileCurrent); mediaFileList.add(mediafile); mediafileDao.insert(mediafile); refreshImageListener(true); }else if (requestCode ==PICK_GIT_PHOTO&&resultCode ==RESULT_OK){ Uri selectedImage = data.getData(); //获取系统返回的照片的Uri String[] filePathColumn = {MediaStore.Images.Media.DATA}; File oldFile = null; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);//从系统表中查询指定Uri对应的照片 if (cursor!=null){ cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); //获取照片路径 oldFile = new File(picturePath); cursor.close(); }else { String a =selectedImage.getPath(); oldFile = new File(a); } File newFile = getNewGitFile(); try { copyfile(oldFile,newFile); Mediafile mediafile = newMediaFile(newFile); mediaFileList.add(mediafile); mediafileDao.insert(mediafile); refreshImageListener(true); } catch (IOException e) { e.printStackTrace(); } }else if (requestCode == VIEW_GIT_PHOTO&&resultCode ==RESULT_OK){ if (data!=null){ int position = data.getIntExtra("position",-1); if (position>-1){ mediaFileList.remove(position); refreshImageListener(true); } } } } }