From dcf5a889d10ca3c0dab7da42fdd9a20aea5215c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E5=B2=A9=28=E7=A7=BB=E5=8A=A8=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=BB=84=29?= Date: Mon, 12 Jul 2021 13:48:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E6=8B=8D=E6=91=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 + .../outdoor/activity/PictureActivity.java | 32 +- .../navinfo/outdoor/api/UserApplication.java | 6 + .../outdoor/fragment/PoiVideoFragment.java | 54 +- .../outdoor/fragment/TreasureFragment.java | 8 +- .../com/navinfo/outdoor/util/FileUtils.java | 1003 ----------------- .../com/navinfo/outdoor/util/IOUtils.java | 98 -- .../com/navinfo/outdoor/util/StringUtils.java | 703 ------------ app/src/main/res/layout/activity_picture.xml | 1 - 9 files changed, 91 insertions(+), 1816 deletions(-) delete mode 100644 app/src/main/java/com/navinfo/outdoor/util/FileUtils.java delete mode 100644 app/src/main/java/com/navinfo/outdoor/util/IOUtils.java delete mode 100644 app/src/main/java/com/navinfo/outdoor/util/StringUtils.java diff --git a/app/build.gradle b/app/build.gradle index 2247c0f..da1dba2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,4 +123,6 @@ dependencies { // 视频拼接 https://blog.csdn.net/u011520181/article/details/89324292 implementation 'com.googlecode.mp4parser:isoparser:1.1.21' + // Android常用库 + implementation 'com.github.lazylibrary:lazylibrary:1.0.2' } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java index b0de988..8823648 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/PictureActivity.java @@ -24,14 +24,14 @@ import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.Toast; +import com.github.lazylibrary.util.DensityUtil; +import com.github.lazylibrary.util.FileUtils; import com.navinfo.outdoor.R; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseActivity; import com.navinfo.outdoor.util.AWMp4ParserHelper; -import com.navinfo.outdoor.util.FileUtils; import com.navinfo.outdoor.util.MyTecentLocationSource; -import com.navinfo.outdoor.util.SdkFolderCreate; import com.otaliastudios.cameraview.CameraException; import com.otaliastudios.cameraview.CameraListener; import com.otaliastudios.cameraview.CameraLogger; @@ -141,7 +141,7 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { // 开始采集,设置按钮文字内容为“结束采集” captureVideo.setText("暂停采集"); - + stopVideo.setEnabled(false); // 开始采集视频后,禁用停止采集的按钮,必须暂停采集后才可点击停止采集 startTakenVideo(); // 开始采集视频 /** @@ -154,6 +154,7 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene // 开始采集,每隔2秒实时记录位置信息、视频时间以及设备时间 timer.schedule(timerTask, 0, period*1000); } else { + stopVideo.setEnabled(true); captureVideo.setText("开始采集"); timerTask.cancel(); stopTakenVideo(); @@ -171,9 +172,16 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene // 设置视频可用的宽高size SizeSelector width = SizeSelectors.maxWidth(1920); - SizeSelector height = SizeSelectors.maxHeight(1024); + SizeSelector height = SizeSelectors.maxHeight(1440); SizeSelector dimensions = SizeSelectors.and(width, height); // Matches sizes bigger than 1000x2000. - SizeSelector ratio = SizeSelectors.aspectRatio(AspectRatio.of(1, 1), 0); // Matches 1:1 sizes. + // 获取屏幕信息 + int[] density = DensityUtil.getDeviceInfo(this); + int x=1920, y=1440; + if (density!=null&&density.length>1) { + x = (density[0]>=density[1]?density[0]:density[1]); + y = (density[0]>=density[1]?density[1]:density[0]); + } + SizeSelector ratio = SizeSelectors.aspectRatio(AspectRatio.of(x, y), 0); // Matches 1:1 sizes. SizeSelector result = SizeSelectors.or( SizeSelectors.and(ratio, dimensions), // Try to match both constraints @@ -181,11 +189,9 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene SizeSelectors.biggest() // If none is found, take the biggest ); camera.setVideoSize(result); - camera.setVideoBitRate(3000*1024); + camera.setVideoBitRate(800*1024); // camera.setAudioBitRate(); - //设置拍照的宽高 - SdkFolderCreate.mkdirs(Constant.PICTURE_FOLDER); //获取地图 tencentMap = ivMap.getMap(); //获取地图UI 设置对象 @@ -231,6 +237,7 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene public void onVideoTaken(@NonNull @NotNull VideoResult result) { super.onVideoTaken(result); Toast.makeText(PictureActivity.this, "暂停摄像", Toast.LENGTH_SHORT).show(); + showLoadingDialog(); if (result!=null) { File currentFile = result.getFile(); if (finalVideoPath!=null) { // 有指定的视频文件名称,合并文件 @@ -256,6 +263,7 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene } } } + dismissLoadingDialog(); } @Override @@ -304,6 +312,13 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene // startTakenVideo(); // 开始拍摄视频 // break; case R.id.btn_stop_video: + if (camera.isTakingVideo()) { + camera.stopVideo(); + } + timerTask.cancel(); + Intent intent = new Intent(); + intent.putExtra(Constant.INTENT_VIDEO_PATH, finalVideoPath); + setResult(0x101, intent); this.finish(); break; @@ -420,6 +435,7 @@ public class PictureActivity extends BaseActivity implements View.OnClickListene super.onDestroy(); stopTakenVideo(); camera.destroy(); + timer.cancel(); if (EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().unregister(this); } diff --git a/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java b/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java index 27d91f6..65b9b62 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java +++ b/app/src/main/java/com/navinfo/outdoor/api/UserApplication.java @@ -45,7 +45,13 @@ public class UserApplication extends Application { if (!baseFolder.exists()) { SdkFolderCreate.mkdirs(baseFolder.getAbsolutePath()); } + + File picFolder = new File(Constant.PICTURE_FOLDER); // 视频照片文件夹路径 + if (!picFolder.exists()) { + SdkFolderCreate.mkdirs(picFolder.getAbsolutePath()); + } TecentLocationUtils.getInstance(this).startLocation(this); + } public static UserApplication getUserApplication() { diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java index e0efc5e..9f84422 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.media.MediaMetadataRetriever; +import android.net.Uri; import android.os.Bundle; import android.os.Message; import android.util.Log; @@ -22,6 +23,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.google.gson.Gson; import com.hjq.permissions.OnPermissionCallback; @@ -36,12 +38,15 @@ import com.navinfo.outdoor.bean.RoadExtend; import com.navinfo.outdoor.room.PoiDao; import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; +import com.navinfo.outdoor.util.AWMp4ParserHelper; import org.greenrobot.eventbus.EventBus; +import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Date; import java.util.List; /** @@ -152,6 +157,21 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick public void onNothingSelected(AdapterView parent) { } }); + + ivRoadPicture.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (v.getTag() == null) { + Toast.makeText(getActivity(), "还没有拍摄视频!", Toast.LENGTH_SHORT).show(); + return; + } + File videoFile = (File) v.getTag(); + Intent intent = new Intent(getContext(), PictureActivity.class); + intent.putExtra(Constant.INTENT_VIDEO_PATH, videoFile.getAbsolutePath()); + startActivityForResult(intent, 0x101); + } + }); + //添加数据 initShowPoi(); //禁用可操作性控件 @@ -176,6 +196,15 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick if (describe != null && !describe.equals("")) { etDesc.setText(describe); } + String photo = showPoiEntity.getPhoto(); + if (photo!=null) { + File videoFile = new File(photo); + if (videoFile.exists()) { + // 使用glide加载视频的第一帧 + AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500); + ivRoadPicture.setTag(videoFile); + } + } } } private void disables() { @@ -254,6 +283,10 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick poiEntity.setTaskId(showPoiEntity.getTaskId()); } } + if (ivRoadPicture.getTag()!=null) { + File videoFile = (File) ivRoadPicture.getTag(); + poiEntity.setPhoto(videoFile.getAbsolutePath()); + } DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); @@ -288,12 +321,31 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick break; case R.id.tv_pictures: + // 根据用户点击的时间为视频名称赋值 + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String videoFormatName = formatter.format(new Date()); Intent intent = new Intent(getContext(), PictureActivity.class); - startActivity(intent); + intent.putExtra(Constant.INTENT_VIDEO_PATH, Constant.PICTURE_FOLDER+"/"+videoFormatName+".mp4"); + startActivityForResult(intent, 0x101); break; } } + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 0x101&&resultCode == 0x101) { + if (data!=null&&data.hasExtra(Constant.INTENT_VIDEO_PATH)) { + String videoPath = data.getStringExtra(Constant.INTENT_VIDEO_PATH); + File videoFile = new File(videoPath); + if (videoFile.exists()) { + AWMp4ParserHelper.getInstance().loadFirstWithGlide(getActivity(), Uri.fromFile(videoFile).toString(), ivRoadPicture, 500); + ivRoadPicture.setTag(videoFile); + } + } + } + } + @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index 0f98de4..b504c60 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -982,8 +982,12 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen @Override public void onDestroy() { super.onDestroy(); - treasureMap.onDestroy(); - markerPoi.remove(); + if (treasureMap!=null) { + treasureMap.onDestroy(); + } + if (markerPoi!=null) { + markerPoi.remove(); + } EventBus.getDefault().unregister(this); } diff --git a/app/src/main/java/com/navinfo/outdoor/util/FileUtils.java b/app/src/main/java/com/navinfo/outdoor/util/FileUtils.java deleted file mode 100644 index ce4777a..0000000 --- a/app/src/main/java/com/navinfo/outdoor/util/FileUtils.java +++ /dev/null @@ -1,1003 +0,0 @@ -package com.navinfo.outdoor.util; -import android.content.Context; -import android.content.Intent; -import android.content.res.AssetManager; -import android.database.Cursor; -import android.net.Uri; -import android.provider.MediaStore; -import android.text.TextUtils; -import android.webkit.MimeTypeMap; -import android.widget.Toast; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - -public class FileUtils { - public final String TAG = "LAZY"; - public final static String FILE_EXTENSION_SEPARATOR = "."; - /** URI类型:file */ - public static final String URI_TYPE_FILE = "file"; - - - private FileUtils() { - throw new AssertionError(); - } - - - /** - * read file - * - * @param filePath 路径 - * @param charsetName The name of a supported {@link - * java.nio.charset.Charset charset} - * @return if file not exist, return null, else return content of file - * @throws RuntimeException if an error occurs while operator - * BufferedReader - */ - public static StringBuilder readFile(String filePath, String charsetName) { - - File file = new File(filePath); - StringBuilder fileContent = new StringBuilder(""); - if (file == null || !file.isFile()) { - return null; - } - - BufferedReader reader = null; - try { - InputStreamReader is = new InputStreamReader( - new FileInputStream(file), charsetName); - reader = new BufferedReader(is); - String line = null; - while ((line = reader.readLine()) != null) { - if (!fileContent.toString().equals("")) { - fileContent.append("\r\n"); - } - fileContent.append(line); - } - return fileContent; - } catch (IOException e) { - throw new RuntimeException("IOException occurred. ", e); - } finally { - IOUtils.close(reader); - } - } - - - /** - * write file - * - * @param filePath 路径 - * @param content 上下文 - * @param append is append, if true, write to the end of file, else clear - * content of file and write into it - * @return return false if content is empty, true otherwise - * @throws RuntimeException if an error occurs while operator FileWriter - */ - public static boolean writeFile(String filePath, String content, boolean append) { - - if (StringUtils.isEmpty(content)) { - return false; - } - - FileWriter fileWriter = null; - try { - makeDirs(filePath); - fileWriter = new FileWriter(filePath, append); - fileWriter.write(content); - return true; - } catch (IOException e) { - throw new RuntimeException("IOException occurred. ", e); - } finally { - IOUtils.close(fileWriter); - } - } - - - /** - * write file - * - * @param filePath 路径 - * @param contentList 集合 - * @param append is append, if true, write to the end of file, else clear - * content of file and write into it - * @return return false if contentList is empty, true otherwise - * @throws RuntimeException if an error occurs while operator FileWriter - */ - public static boolean writeFile(String filePath, List contentList, boolean append) { - - if (contentList.size()==0||null==contentList) { - return false; - } - - FileWriter fileWriter = null; - try { - makeDirs(filePath); - fileWriter = new FileWriter(filePath, append); - int i = 0; - for (String line : contentList) { - if (i++ > 0) { - fileWriter.write("\r\n"); - } - fileWriter.write(line); - } - return true; - } catch (IOException e) { - throw new RuntimeException("IOException occurred. ", e); - } finally { - IOUtils.close(fileWriter); - } - } - - - /** - * write file, the string will be written to the begin of the file - * @param filePath 地址 - * @param content 上下文 - * @return 是否写入成功 - */ - public static boolean writeFile(String filePath, String content) { - - return writeFile(filePath, content, false); - } - - - /** - * write file, the string list will be written to the begin of the file - * @param filePath 地址 - * @param contentList 集合 - * @return 是否写入成功 - */ - public static boolean writeFile(String filePath, List contentList) { - return writeFile(filePath, contentList, false); - - } - - - /** - * write file, the bytes will be written to the begin of the file - * - * @param filePath 路径 - * @param stream 输入流 - * @return 返回是否写入成功 - */ - public static boolean writeFile(String filePath, InputStream stream) { - return writeFile(filePath, stream, false); - - } - - - /** - * write file - * - * @param filePath 路径 - * @param stream the input stream - * @param append if true, then bytes will be written to the - * end - * of the file rather than the beginning - * @return return true - * FileOutputStream - */ - public static boolean writeFile(String filePath, InputStream stream, boolean append) { - - return writeFile(filePath != null ? new File(filePath) : null, stream, - append); - } - - - /** - * write file, the bytes will be written to the begin of the file - * - * @param file 文件对象 - * @param stream 输入流 - * @return 返回是否写入成功 - */ - public static boolean writeFile(File file, InputStream stream) { - return writeFile(file, stream, false); - - } - - - /** - * write file - * - * @param file the file to be opened for writing. - * @param stream the input stream - * @param append if true, then bytes will be written to the - * end - * of the file rather than the beginning - * @return return true - * @throws RuntimeException if an error occurs while operator - * FileOutputStream - */ - public static boolean writeFile(File file, InputStream stream, boolean append) { - OutputStream o = null; - try { - makeDirs(file.getAbsolutePath()); - o = new FileOutputStream(file, append); - byte data[] = new byte[1024]; - int length = -1; - while ((length = stream.read(data)) != -1) { - o.write(data, 0, length); - } - o.flush(); - return true; - } catch (FileNotFoundException e) { - throw new RuntimeException("FileNotFoundException occurred. ", e); - } catch (IOException e) { - throw new RuntimeException("IOException occurred. ", e); - } finally { - IOUtils.close(o); - IOUtils.close(stream); - } - } - - - /** - * move file - * @param sourceFilePath 资源路径 - * @param destFilePath 删除的路径 - */ - public static void moveFile(String sourceFilePath, String destFilePath) { - - if (TextUtils.isEmpty(sourceFilePath) || - TextUtils.isEmpty(destFilePath)) { - throw new RuntimeException( - "Both sourceFilePath and destFilePath cannot be null."); - } - moveFile(new File(sourceFilePath), new File(destFilePath)); - } - - - /** - * move file - * @param srcFile 文件对象 - * @param destFile 对象 - */ - public static void moveFile(File srcFile, File destFile) { - - boolean rename = srcFile.renameTo(destFile); - if (!rename) { - copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath()); - deleteFile(srcFile.getAbsolutePath()); - } - } - - - /** - * copy file - * - * @param sourceFilePath 资源路径 - * @param destFilePath 删除的文件 - * @throws RuntimeException if an error occurs while operator - * FileOutputStream - * @return 返回是否成功 - */ - public static boolean copyFile(String sourceFilePath, String destFilePath) { - - InputStream inputStream = null; - try { - inputStream = new FileInputStream(sourceFilePath); - } catch (FileNotFoundException e) { - throw new RuntimeException("FileNotFoundException occurred. ", e); - } - return writeFile(destFilePath, inputStream); - } - - - /** - * read file to string list, a element of list is a line - * - * @param filePath 路径 - * @param charsetName The name of a supported {@link - * java.nio.charset.Charset charset} - * @return if file not exist, return null, else return content of file - * @throws RuntimeException if an error occurs while operator - * BufferedReader - */ - public static List readFileToList(String filePath, String charsetName) { - - File file = new File(filePath); - List fileContent = new ArrayList(); - if (file == null || !file.isFile()) { - return null; - } - - BufferedReader reader = null; - try { - InputStreamReader is = new InputStreamReader( - new FileInputStream(file), charsetName); - reader = new BufferedReader(is); - String line = null; - while ((line = reader.readLine()) != null) { - fileContent.add(line); - } - return fileContent; - } catch (IOException e) { - throw new RuntimeException("IOException occurred. ", e); - } finally { - IOUtils.close(reader); - } - } - - - /** - * - * @param filePath 文件的路径 - * @return 返回文件的信息 - */ - public static String getFileNameWithoutExtension(String filePath) { - - - if (StringUtils.isEmpty(filePath)) { - return filePath; - } - - int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); - int filePosi = filePath.lastIndexOf(File.separator); - if (filePosi == -1) { - return (extenPosi == -1 - ? filePath - : filePath.substring(0, extenPosi)); - } - if (extenPosi == -1) { - return filePath.substring(filePosi + 1); - } - return (filePosi < extenPosi ? filePath.substring(filePosi + 1, - extenPosi) : filePath.substring(filePosi + 1)); - } - - - /** - * get file name from path, include suffix - * - *
-     *      getFileName(null)               =   null
-     *      getFileName("")                 =   ""
-     *      getFileName("   ")              =   "   "
-     *      getFileName("a.mp3")            =   "a.mp3"
-     *      getFileName("a.b.rmvb")         =   "a.b.rmvb"
-     *      getFileName("abc")              =   "abc"
-     *      getFileName("c:\\")              =   ""
-     *      getFileName("c:\\a")             =   "a"
-     *      getFileName("c:\\a.b")           =   "a.b"
-     *      getFileName("c:a.txt\\a")        =   "a"
-     *      getFileName("/home/admin")      =   "admin"
-     *      getFileName("/home/admin/a.txt/b.mp3")  =   "b.mp3"
-     * 
- * - * @param filePath 路径 - * @return file name from path, include suffix - */ - public static String getFileName(String filePath) { - - if (StringUtils.isEmpty(filePath)) { - return filePath; - } - - int filePosi = filePath.lastIndexOf(File.separator); - return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1); - } - - - /** - * get folder name from path - * - *
-     *      getFolderName(null)               =   null
-     *      getFolderName("")                 =   ""
-     *      getFolderName("   ")              =   ""
-     *      getFolderName("a.mp3")            =   ""
-     *      getFolderName("a.b.rmvb")         =   ""
-     *      getFolderName("abc")              =   ""
-     *      getFolderName("c:\\")              =   "c:"
-     *      getFolderName("c:\\a")             =   "c:"
-     *      getFolderName("c:\\a.b")           =   "c:"
-     *      getFolderName("c:a.txt\\a")        =   "c:a.txt"
-     *      getFolderName("c:a\\b\\c\\d.txt")    =   "c:a\\b\\c"
-     *      getFolderName("/home/admin")      =   "/home"
-     *      getFolderName("/home/admin/a.txt/b.mp3")  =   "/home/admin/a.txt"
-     * 
- * @param filePath 路径 - * @return file name from path, include suffix - */ - public static String getFolderName(String filePath) { - - - if (StringUtils.isEmpty(filePath)) { - return filePath; - } - - int filePosi = filePath.lastIndexOf(File.separator); - return (filePosi == -1) ? "" : filePath.substring(0, filePosi); - } - - - /** - * get suffix of file from path - * - *
-     *      getFileExtension(null)               =   ""
-     *      getFileExtension("")                 =   ""
-     *      getFileExtension("   ")              =   "   "
-     *      getFileExtension("a.mp3")            =   "mp3"
-     *      getFileExtension("a.b.rmvb")         =   "rmvb"
-     *      getFileExtension("abc")              =   ""
-     *      getFileExtension("c:\\")              =   ""
-     *      getFileExtension("c:\\a")             =   ""
-     *      getFileExtension("c:\\a.b")           =   "b"
-     *      getFileExtension("c:a.txt\\a")        =   ""
-     *      getFileExtension("/home/admin")      =   ""
-     *      getFileExtension("/home/admin/a.txt/b")  =   ""
-     *      getFileExtension("/home/admin/a.txt/b.mp3")  =   "mp3"
-     * 
- * @param filePath 路径 - * @return 信息 - */ - public static String getFileExtension(String filePath) { - - if (StringUtils.isBlank(filePath)) { - return filePath; - } - - int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); - int filePosi = filePath.lastIndexOf(File.separator); - if (extenPosi == -1) { - return ""; - } - return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1); - } - - - /** - * - * @param filePath 路径 - * @return 是否创建成功 - */ - public static boolean makeDirs(String filePath) { - - String folderName = getFolderName(filePath); - if (StringUtils.isEmpty(folderName)) { - return false; - } - - File folder = new File(folderName); - return (folder.exists() && folder.isDirectory()) - ? true - : folder.mkdirs(); - } - - - /** - * - * @param filePath 路径 - * @return 是否创建成功 - */ - public static boolean makeFolders(String filePath) { - return makeDirs(filePath); - - } - - - /** - * - * @param filePath 路径 - * @return 是否存在这个文件 - */ - public static boolean isFileExist(String filePath) { - if (StringUtils.isBlank(filePath)) { - return false; - } - - File file = new File(filePath); - return (file.exists() && file.isFile()); - - } - - - /** - * - * @param directoryPath 路径 - * @return 是否有文件夹 - */ - public static boolean isFolderExist(String directoryPath) { - - if (StringUtils.isBlank(directoryPath)) { - return false; - } - - File dire = new File(directoryPath); - return (dire.exists() && dire.isDirectory()); - } - - - /** - * - * @param path 路径 - * @return 是否删除成功 - */ - public static boolean deleteFile(String path) { - - if (StringUtils.isBlank(path)) { - return true; - } - - File file = new File(path); - if (!file.exists()) { - return true; - } - if (file.isFile()) { - return file.delete(); - } - if (!file.isDirectory()) { - return false; - } - for (File f : file.listFiles()) { - if (f.isFile()) { - f.delete(); - } - else if (f.isDirectory()) { - deleteFile(f.getAbsolutePath()); - } - } - return file.delete(); - } - - - /** - * - * @param path 路径 - * @return 返回文件大小 - */ - public static long getFileSize(String path) { - - if (StringUtils.isBlank(path)) { - return -1; - } - - File file = new File(path); - return (file.exists() && file.isFile() ? file.length() : -1); - } - - - /** - * 保存多媒体数据为文件. - * - * @param data 多媒体数据 - * @param fileName 保存文件名 - * @return 保存成功或失败 - */ - public static boolean save2File(InputStream data, String fileName) { - File file = new File(fileName); - FileOutputStream fos = null; - try { - // 文件或目录不存在时,创建目录和文件. - if (!file.exists()) { - file.getParentFile().mkdirs(); - file.createNewFile(); - } - - // 写入数据 - fos = new FileOutputStream(file); - byte[] b = new byte[1024]; - int len; - while ((len = data.read(b)) > -1) { - fos.write(b, 0, len); - } - fos.close(); - - return true; - } catch (IOException ex) { - - return false; - } - } - - - /** - * 读取文件的字节数组. - * - * @param file 文件 - * @return 字节数组 - */ - public static byte[] readFile4Bytes(File file) { - - // 如果文件不存在,返回空 - if (!file.exists()) { - return null; - } - FileInputStream fis = null; - try { - // 读取文件内容. - fis = new FileInputStream(file); - byte[] arrData = new byte[(int) file.length()]; - fis.read(arrData); - // 返回 - return arrData; - } catch (IOException e) { - - return null; - } finally { - if (fis != null) { - try { - fis.close(); - } catch (IOException e) { - - } - } - } - } - - - /** - * 读取文本文件内容,以行的形式读取 - * - * @param filePathAndName 带有完整绝对路径的文件名 - * @return String 返回文本文件的内容 - */ - public static String readFileContent(String filePathAndName) { - try { - return readFileContent(filePathAndName, null, null, 1024); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - - /** - * 读取文本文件内容,以行的形式读取 - * - * @param filePathAndName 带有完整绝对路径的文件名 - * @param encoding 文本文件打开的编码方式 例如 GBK,UTF-8 - * @param sep 分隔符 例如:#,默认为\n; - * @param bufLen 设置缓冲区大小 - * @return String 返回文本文件的内容 - */ - public static String readFileContent(String filePathAndName, String encoding, String sep, int bufLen) - { - if (filePathAndName == null || filePathAndName.equals("")) { - return ""; - } - if (sep == null || sep.equals("")) { - sep = "\n"; - } - if (!new File(filePathAndName).exists()) { - return ""; - } - StringBuffer str = new StringBuffer(""); - FileInputStream fs = null; - InputStreamReader isr = null; - BufferedReader br = null; - try { - fs = new FileInputStream(filePathAndName); - if (encoding == null || encoding.trim().equals("")) { - isr = new InputStreamReader(fs); - } - else { - isr = new InputStreamReader(fs, encoding.trim()); - } - br = new BufferedReader(isr, bufLen); - - String data = ""; - while ((data = br.readLine()) != null) { - str.append(data).append(sep); - } - } catch (IOException e) { - } finally { - try { - if (br != null) br.close(); - if (isr != null) isr.close(); - if (fs != null) fs.close(); - } catch (IOException e) { - } - } - return str.toString(); - } - - - /** - * 把Assets里的文件拷贝到sd卡上 - * - * @param assetManager AssetManager - * @param fileName Asset文件名 - * @param destinationPath 完整目标路径 - * @return 拷贝成功 - */ - public static boolean copyAssetToSDCard(AssetManager assetManager, String fileName, String destinationPath) { - - try { - InputStream is = assetManager.open(fileName); - FileOutputStream os = new FileOutputStream(destinationPath); - - if (is != null && os != null) { - byte[] data = new byte[1024]; - int len; - while ((len = is.read(data)) > 0) { - os.write(data, 0, len); - } - - os.close(); - is.close(); - } - } catch (IOException e) { - return false; - } - return true; - } - - - /** - * 调用系统方式打开文件. - * - * @param context 上下文 - * @param file 文件 - */ - public static void openFile(Context context, File file) { - - try { - // 调用系统程序打开文件. - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setDataAndType(Uri.fromFile(file), MimeTypeMap.getSingleton() - .getMimeTypeFromExtension( - MimeTypeMap - .getFileExtensionFromUrl( - file.getPath()))); - context.startActivity(intent); - } catch (Exception ex) { - Toast.makeText(context, "打开失败.", Toast.LENGTH_SHORT).show(); - } - } - - - /** - * 根据文件路径,检查文件是否不大于指定大小 - * - * @param filepath 文件路径 - * @param maxSize 最大 - * @return 是否 - */ - public static boolean checkFileSize(String filepath, int maxSize) { - - File file = new File(filepath); - if (!file.exists() || file.isDirectory()) { - return false; - } - if (file.length() <= maxSize * 1024) { - return true; - } - else { - return false; - } - } - - - /** - * - * @param context 上下文 - * @param file 文件对象 - */ - public static void openMedia(Context context, File file) { - - if (file.getName().endsWith(".png") || - file.getName().endsWith(".jpg") || - file.getName().endsWith(".jpeg")) { - viewPhoto(context, file); - } - else { - openFile(context, file); - } - } - - - /** - * 打开多媒体文件. - * - * @param context 上下文 - * @param file 多媒体文件 - */ - public static void viewPhoto(Context context, String file) { - - viewPhoto(context, new File(file)); - } - - - /** - * 打开照片 - * @param context 上下文 - * @param file 文件对象 - */ - public static void viewPhoto(Context context, File file) { - - try { - // 调用系统程序打开文件. - Intent intent = new Intent(Intent.ACTION_VIEW); - // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setDataAndType(Uri.fromFile(file), "image/*"); - context.startActivity(intent); - } catch (Exception ex) { - Toast.makeText(context, "打开失败.", Toast.LENGTH_SHORT).show(); - } - } - - - /** - * 将字符串以UTF-8编码保存到文件中 - * @param str 保存的字符串 - * @param fileName 文件的名字 - * @return 是否保存成功 - */ - public static boolean saveStrToFile(String str, String fileName) { - - return saveStrToFile(str, fileName, "UTF-8"); - } - - - /** - * 将字符串以charsetName编码保存到文件中 - * @param str 保存的字符串 - * @param fileName 文件的名字 - * @param charsetName 字符串编码 - * @return 是否保存成功 - */ - public static boolean saveStrToFile(String str, String fileName, String charsetName) { - - if (str == null || "".equals(str)) { - return false; - } - - FileOutputStream stream = null; - try { - File file = new File(fileName); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - - byte[] b = null; - if (charsetName != null && !"".equals(charsetName)) { - b = str.getBytes(charsetName); - } - else { - b = str.getBytes(); - } - - stream = new FileOutputStream(file); - stream.write(b, 0, b.length); - stream.flush(); - return true; - } catch (Exception e) { - return false; - } finally { - if (stream != null) { - try { - stream.close(); - stream = null; - } catch (Exception e) { - } - } - } - } - - - /** - * 将content://形式的uri转为实际文件路径 - * @param context 上下文 - * @param uri 地址 - * @return uri转为实际文件路径 - */ - public static String uriToPath(Context context, Uri uri) { - - Cursor cursor = null; - try { - if (uri.getScheme().equalsIgnoreCase(URI_TYPE_FILE)) { - return uri.getPath(); - } - cursor = context.getContentResolver() - .query(uri, null, null, null, null); - if (cursor.moveToFirst()) { - return cursor.getString(cursor.getColumnIndex( - MediaStore.Images.Media.DATA)); //图片文件路径 - } - } catch (Exception e) { - if (null != cursor) { - cursor.close(); - cursor = null; - } - return null; - } - return null; - } - - - /** - * 打开多媒体文件. - * - * @param context 上下文 - * @param file 多媒体文件 - */ - public static void playSound(Context context, String file) { - - playSound(context, new File(file)); - } - - - /** - * 打开多媒体文件. - * - * @param context 上下文 - * @param file 多媒体文件 - */ - public static void playSound(Context context, File file) { - - try { - // 调用系统程序打开文件. - Intent intent = new Intent(Intent.ACTION_VIEW); - // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - // intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivity"); - intent.setDataAndType(Uri.fromFile(file), "audio/*"); - context.startActivity(intent); - } catch (Exception ex) { - Toast.makeText(context, "打开失败.", Toast.LENGTH_SHORT).show(); - } - } - - - /** - * 打开视频文件. - * - * @param context 上下文 - * @param file 视频文件 - */ - public static void playVideo(Context context, String file) { - - playVideo(context, new File(file)); - } - - - /** - * 打开视频文件. - * @param context 上下文 - * @param file 视频文件 - */ - public static void playVideo(Context context, File file) { - try { - // 调用系统程序打开文件. - Intent intent = new Intent(Intent.ACTION_VIEW); - // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setDataAndType(Uri.fromFile(file), "video/*"); - context.startActivity(intent); - } catch (Exception ex) { - Toast.makeText(context, "打开失败.", Toast.LENGTH_SHORT).show(); - } - } - - - /** - * 文件重命名 - * - * @param oldPath 旧的文件名字 - * @param newPath 新的文件名字 - */ - public static void renameFile(String oldPath, String newPath) { - - try { - if (!TextUtils.isEmpty(oldPath) && !TextUtils.isEmpty(newPath) - && !oldPath.equals(newPath)) { - File fileOld = new File(oldPath); - File fileNew = new File(newPath); - fileOld.renameTo(fileNew); - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/outdoor/util/IOUtils.java b/app/src/main/java/com/navinfo/outdoor/util/IOUtils.java deleted file mode 100644 index a1f99f1..0000000 --- a/app/src/main/java/com/navinfo/outdoor/util/IOUtils.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.navinfo.outdoor.util; - -import java.io.Closeable; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; - -/** - * IO utils - * - * @author Vladislav Bauer - */ - -public class IOUtils { - - private IOUtils() { - throw new AssertionError(); - } - - - /** - * Close closable object and wrap {@link IOException} with {@link - * RuntimeException} - * - * @param closeable closeable object - */ - public static void close(Closeable closeable) { - if (closeable != null) { - try { - closeable.close(); - } catch (IOException e) { - throw new RuntimeException("IOException occurred. ", e); - } - } - } - - - /** - * Close closable and hide possible {@link IOException} - * - * @param closeable closeable object - */ - public static void closeQuietly(Closeable closeable) { - if (closeable != null) { - try { - closeable.close(); - } catch (IOException e) { - // Ignored - } - } - } - - - /** - *保存文本 - * @param fileName 文件名字 - * @param content 内容 - * @param append 是否累加 - * @return 是否成功 - */ - public static boolean saveTextValue(String fileName, String content, boolean append) { - - try { - File textFile = new File(fileName); - if (!append && textFile.exists()) textFile.delete(); - - FileOutputStream os = new FileOutputStream(textFile); - os.write(content.getBytes("UTF-8")); - os.close(); - } catch (Exception ee) { - return false; - } - - return true; - } - - - /** - * 删除目录下所有文件 - * @param Path 路径 - */ - public static void deleteAllFile(String Path) { - - // 删除目录下所有文件 - File path = new File(Path); - File files[] = path.listFiles(); - if (files != null) { - for (File tfi : files) { - if (tfi.isDirectory()) { - System.out.println(tfi.getName()); - } - else { - tfi.delete(); - } - } - } - } -} diff --git a/app/src/main/java/com/navinfo/outdoor/util/StringUtils.java b/app/src/main/java/com/navinfo/outdoor/util/StringUtils.java deleted file mode 100644 index 3c10205..0000000 --- a/app/src/main/java/com/navinfo/outdoor/util/StringUtils.java +++ /dev/null @@ -1,703 +0,0 @@ -package com.navinfo.outdoor.util; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.util.ArrayList; -import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - *

字符串工具类,提供一些字符串相关的便捷方法

- */ -public class StringUtils { - - private StringUtils() { - throw new AssertionError(); - } - - - /** - * is null or its length is 0 or it is made by space - * - *
-     * isBlank(null) = true;
-     * isBlank("") = true;
-     * isBlank("  ") = true;
-     * isBlank("a") = false;
-     * isBlank("a ") = false;
-     * isBlank(" a") = false;
-     * isBlank("a b") = false;
-     * 
- * - * @param str str - * @return if string is null or its size is 0 or it is made by space, return - * true, else return false. - */ - public static boolean isBlank(String str) { - - return (str == null || str.trim().length() == 0); - } - - - /** - * is null or its length is 0 - * - *
-     * isEmpty(null) = true;
-     * isEmpty("") = true;
-     * isEmpty("  ") = false;
-     * 
- * - * @param str str - * @return if string is null or its size is 0, return true, else return - * false. - */ - public static boolean isEmpty(CharSequence str) { - - return (str == null || str.length() == 0); - } - - - /** - * get length of CharSequence - * - *
-     * length(null) = 0;
-     * length(\"\") = 0;
-     * length(\"abc\") = 3;
-     * 
- * - * @param str str - * @return if str is null or empty, return 0, else return {@link - * CharSequence#length()}. - */ - public static int length(CharSequence str) { - - return str == null ? 0 : str.length(); - } - - - /** - * null Object to empty string - * - *
-     * nullStrToEmpty(null) = "";
-     * nullStrToEmpty("") = "";
-     * nullStrToEmpty("aa") = "aa";
-     * 
- * - * @param str str - * @return String - */ - public static String nullStrToEmpty(Object str) { - - return (str == null - ? "" - : (str instanceof String ? (String) str : str.toString())); - } - - - /** - * @param str str - * @return String - */ - public static String capitalizeFirstLetter(String str) { - - if (isEmpty(str)) { - return str; - } - - char c = str.charAt(0); - return (!Character.isLetter(c) || Character.isUpperCase(c)) - ? str - : new StringBuilder(str.length()).append( - Character.toUpperCase(c)) - .append(str.substring(1)) - .toString(); - } - - - /** - * encoded in utf-8 - * - * @param str 字符串 - * @return 返回一个utf8的字符串 - */ - public static String utf8Encode(String str) { - - if (!isEmpty(str) && str.getBytes().length != str.length()) { - try { - return URLEncoder.encode(str, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException( - "UnsupportedEncodingException occurred. ", e); - } - } - return str; - } - - - /** - * @param href 字符串 - * @return 返回一个html - */ - public static String getHrefInnerHtml(String href) { - - if (isEmpty(href)) { - return ""; - } - - String hrefReg = ".*<[\\s]*a[\\s]*.*>(.+?)<[\\s]*/a[\\s]*>.*"; - Pattern hrefPattern = Pattern.compile(hrefReg, - Pattern.CASE_INSENSITIVE); - Matcher hrefMatcher = hrefPattern.matcher(href); - if (hrefMatcher.matches()) { - return hrefMatcher.group(1); - } - return href; - } - - - /** - * @param source 字符串 - * @return 返回htmL到字符串 - */ - public static String htmlEscapeCharsToString(String source) { - - return StringUtils.isEmpty(source) - ? source - : source.replaceAll("<", "<") - .replaceAll(">", ">") - .replaceAll("&", "&") - .replaceAll(""", "\""); - } - - - /** - * @param s str - * @return String - */ - public static String fullWidthToHalfWidth(String s) { - - if (isEmpty(s)) { - return s; - } - - char[] source = s.toCharArray(); - for (int i = 0; i < source.length; i++) { - if (source[i] == 12288) { - source[i] = ' '; - // } else if (source[i] == 12290) { - // source[i] = '.'; - } - else if (source[i] >= 65281 && source[i] <= 65374) { - source[i] = (char) (source[i] - 65248); - } - else { - source[i] = source[i]; - } - } - return new String(source); - } - - - /** - * @param s 字符串 - * @return 返回的数值 - */ - public static String halfWidthToFullWidth(String s) { - - if (isEmpty(s)) { - return s; - } - - char[] source = s.toCharArray(); - for (int i = 0; i < source.length; i++) { - if (source[i] == ' ') { - source[i] = (char) 12288; - // } else if (source[i] == '.') { - // source[i] = (char)12290; - } - else if (source[i] >= 33 && source[i] <= 126) { - source[i] = (char) (source[i] + 65248); - } - else { - source[i] = source[i]; - } - } - return new String(source); - } - - - /** - * @param str 资源 - * @return 特殊字符串切换 - */ - - public static String replaceBlanktihuan(String str) { - - String dest = ""; - if (str != null) { - Pattern p = Pattern.compile("\\s*|\t|\r|\n"); - Matcher m = p.matcher(str); - dest = m.replaceAll(""); - } - return dest; - } - - - /** - * 判断给定的字符串是否为null或者是空的 - * - * @param string 给定的字符串 - */ - public static boolean isEmpty(String string) { - return string == null || "".equals(string.trim()); - } - - - /** - * 判断给定的字符串是否不为null且不为空 - * - * @param string 给定的字符串 - */ - public static boolean isNotEmpty(String string) { - return !isEmpty(string); - } - - - /** - * 判断给定的字符串数组中的所有字符串是否都为null或者是空的 - * - * @param strings 给定的字符串 - */ - public static boolean isEmpty(String... strings) { - boolean result = true; - for (String string : strings) { - if (isNotEmpty(string)) { - result = false; - break; - } - } - return result; - } - - - /** - * 判断给定的字符串数组中是否全部都不为null且不为空 - * - * @param strings 给定的字符串数组 - * @return 是否全部都不为null且不为空 - */ - public static boolean isNotEmpty(String... strings) { - boolean result = true; - for (String string : strings) { - if (isEmpty(string)) { - result = false; - break; - } - } - return result; - } - - - /** - * 如果字符串是null或者空就返回"" - */ - public static String filterEmpty(String string) { - return StringUtils.isNotEmpty(string) ? string : ""; - } - - - /** - * 在给定的字符串中,用新的字符替换所有旧的字符 - * - * @param string 给定的字符串 - * @param oldchar 旧的字符 - * @param newchar 新的字符 - * @return 替换后的字符串 - */ - public static String replace(String string, char oldchar, char newchar) { - char chars[] = string.toCharArray(); - for (int w = 0; w < chars.length; w++) { - if (chars[w] == oldchar) { - chars[w] = newchar; - break; - } - } - return new String(chars); - } - - - /** - * 把给定的字符串用给定的字符分割 - * - * @param string 给定的字符串 - * @param ch 给定的字符 - * @return 分割后的字符串数组 - */ - public static String[] split(String string, char ch) { - ArrayList stringList = new ArrayList(); - char chars[] = string.toCharArray(); - int nextStart = 0; - for (int w = 0; w < chars.length; w++) { - if (ch == chars[w]) { - stringList.add(new String(chars, nextStart, w - nextStart)); - nextStart = w + 1; - if (nextStart == - chars.length) { //当最后一位是分割符的话,就再添加一个空的字符串到分割数组中去 - stringList.add(""); - } - } - } - if (nextStart < - chars.length) { //如果最后一位不是分隔符的话,就将最后一个分割符到最后一个字符中间的左右字符串作为一个字符串添加到分割数组中去 - stringList.add(new String(chars, nextStart, - chars.length - 1 - nextStart + 1)); - } - return stringList.toArray(new String[stringList.size()]); - } - - - /** - * 计算给定的字符串的长度,计算规则是:一个汉字的长度为2,一个字符的长度为1 - * - * @param string 给定的字符串 - * @return 长度 - */ - public static int countLength(String string) { - int length = 0; - char[] chars = string.toCharArray(); - for (int w = 0; w < string.length(); w++) { - char ch = chars[w]; - if (ch >= '\u0391' && ch <= '\uFFE5') { - length++; - length++; - } - else { - length++; - } - } - return length; - } - - - private static char[] getChars(char[] chars, int startIndex) { - int endIndex = startIndex + 1; - //如果第一个是数字 - if (Character.isDigit(chars[startIndex])) { - //如果下一个是数字 - while (endIndex < chars.length && - Character.isDigit(chars[endIndex])) { - endIndex++; - } - } - char[] resultChars = new char[endIndex - startIndex]; - System.arraycopy(chars, startIndex, resultChars, 0, resultChars.length); - return resultChars; - } - - - /** - * 是否全是数字 - */ - public static boolean isAllDigital(char[] chars) { - boolean result = true; - for (int w = 0; w < chars.length; w++) { - if (!Character.isDigit(chars[w])) { - result = false; - break; - } - } - return result; - } - - - - - /** - * 删除给定字符串中所有的旧的字符 - * - * @param string 源字符串 - * @param ch 要删除的字符 - * @return 删除后的字符串 - */ - public static String removeChar(String string, char ch) { - StringBuffer sb = new StringBuffer(); - for (char cha : string.toCharArray()) { - if (cha != '-') { - sb.append(cha); - } - } - return sb.toString(); - } - - - /** - * 删除给定字符串中给定位置处的字符 - * - * @param string 给定字符串 - * @param index 给定位置 - */ - public static String removeChar(String string, int index) { - String result = null; - char[] chars = string.toCharArray(); - if (index == 0) { - result = new String(chars, 1, chars.length - 1); - } - else if (index == chars.length - 1) { - result = new String(chars, 0, chars.length - 1); - } - else { - result = new String(chars, 0, index) + - new String(chars, index + 1, chars.length - index); - ; - } - return result; - } - - - /** - * 删除给定字符串中给定位置处的字符 - * - * @param string 给定字符串 - * @param index 给定位置 - * @param ch 如果同给定位置处的字符相同,则将给定位置处的字符删除 - */ - public static String removeChar(String string, int index, char ch) { - String result = null; - char[] chars = string.toCharArray(); - if (chars.length > 0 && chars[index] == ch) { - if (index == 0) { - result = new String(chars, 1, chars.length - 1); - } - else if (index == chars.length - 1) { - result = new String(chars, 0, chars.length - 1); - } - else { - result = new String(chars, 0, index) + - new String(chars, index + 1, chars.length - index); - ; - } - } - else { - result = string; - } - return result; - } - - - /** - * 对给定的字符串进行空白过滤 - * - * @param string 给定的字符串 - * @return 如果给定的字符串是一个空白字符串,那么返回null;否则返回本身。 - */ - public static String filterBlank(String string) { - if ("".equals(string)) { - return null; - } - else { - return string; - } - } - - - /** - * 将给定字符串中给定的区域的字符转换成小写 - * - * @param str 给定字符串中 - * @param beginIndex 开始索引(包括) - * @param endIndex 结束索引(不包括) - * @return 新的字符串 - */ - public static String toLowerCase(String str, int beginIndex, int endIndex) { - return str.replaceFirst(str.substring(beginIndex, endIndex), - str.substring(beginIndex, endIndex) - .toLowerCase(Locale.getDefault())); - } - - - /** - * 将给定字符串中给定的区域的字符转换成大写 - * - * @param str 给定字符串中 - * @param beginIndex 开始索引(包括) - * @param endIndex 结束索引(不包括) - * @return 新的字符串 - */ - public static String toUpperCase(String str, int beginIndex, int endIndex) { - return str.replaceFirst(str.substring(beginIndex, endIndex), - str.substring(beginIndex, endIndex) - .toUpperCase(Locale.getDefault())); - } - - - /** - * 将给定字符串的首字母转为小写 - * - * @param str 给定字符串 - * @return 新的字符串 - */ - public static String firstLetterToLowerCase(String str) { - return toLowerCase(str, 0, 1); - } - - - /** - * 将给定字符串的首字母转为大写 - * - * @param str 给定字符串 - * @return 新的字符串 - */ - public static String firstLetterToUpperCase(String str) { - return toUpperCase(str, 0, 1); - } - - - /** - * 将给定的字符串MD5加密 - * - * @param string 给定的字符串 - * @return MD5加密后生成的字符串 - */ - public static String MD5(String string) { - String result = null; - try { - char[] charArray = string.toCharArray(); - byte[] byteArray = new byte[charArray.length]; - for (int i = 0; i < charArray.length; i++) { - byteArray[i] = (byte) charArray[i]; - } - - StringBuffer hexValue = new StringBuffer(); - byte[] md5Bytes = MessageDigest.getInstance("MD5") - .digest(byteArray); - for (int i = 0; i < md5Bytes.length; i++) { - int val = ((int) md5Bytes[i]) & 0xff; - if (val < 16) { - hexValue.append("0"); - } - hexValue.append(Integer.toHexString(val)); - } - - result = hexValue.toString(); - } catch (Exception e) { - e.printStackTrace(); - } - return result; - } - - - /** - * 判断给定的字符串是否以一个特定的字符串开头,忽略大小写 - * - * @param sourceString 给定的字符串 - * @param newString 一个特定的字符串 - */ - public static boolean startsWithIgnoreCase(String sourceString, String newString) { - int newLength = newString.length(); - int sourceLength = sourceString.length(); - if (newLength == sourceLength) { - return newString.equalsIgnoreCase(sourceString); - } - else if (newLength < sourceLength) { - char[] newChars = new char[newLength]; - sourceString.getChars(0, newLength, newChars, 0); - return newString.equalsIgnoreCase(String.valueOf(newChars)); - } - else { - return false; - } - } - - - /** - * 判断给定的字符串是否以一个特定的字符串结尾,忽略大小写 - * - * @param sourceString 给定的字符串 - * @param newString 一个特定的字符串 - */ - public static boolean endsWithIgnoreCase(String sourceString, String newString) { - int newLength = newString.length(); - int sourceLength = sourceString.length(); - if (newLength == sourceLength) { - return newString.equalsIgnoreCase(sourceString); - } - else if (newLength < sourceLength) { - char[] newChars = new char[newLength]; - sourceString.getChars(sourceLength - newLength, sourceLength, - newChars, 0); - return newString.equalsIgnoreCase(String.valueOf(newChars)); - } - else { - return false; - } - } - - - /** - * 检查字符串长度,如果字符串的长度超过maxLength,就截取前maxLength个字符串并在末尾拼上appendString - */ - public static String checkLength(String string, int maxLength, String appendString) { - if (string.length() > maxLength) { - string = string.substring(0, maxLength); - if (appendString != null) { - string += appendString; - } - } - return string; - } - - - /** - * 检查字符串长度,如果字符串的长度超过maxLength,就截取前maxLength个字符串并在末尾拼上… - */ - public static String checkLength(String string, int maxLength) { - return checkLength(string, maxLength, "…"); - } - - - /** - * 删除Html标签 - * - * @param inputString - * @return - */ - public static String htmlRemoveTag(String inputString) { - if (inputString == null) - return null; - String htmlStr = inputString; // 含html标签的字符串 - String textStr = ""; - java.util.regex.Pattern p_script; - java.util.regex.Matcher m_script; - java.util.regex.Pattern p_style; - java.util.regex.Matcher m_style; - java.util.regex.Pattern p_html; - java.util.regex.Matcher m_html; - try { - //定义script的正则表达式{或]*?>[\\s\\S]*?<\\/script> - String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; - //定义style的正则表达式{或]*?>[\\s\\S]*?<\\/style> - String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; - String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 - p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE); - m_script = p_script.matcher(htmlStr); - htmlStr = m_script.replaceAll(""); // 过滤script标签 - p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE); - m_style = p_style.matcher(htmlStr); - htmlStr = m_style.replaceAll(""); // 过滤style标签 - p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE); - m_html = p_html.matcher(htmlStr); - htmlStr = m_html.replaceAll(""); // 过滤html标签 - textStr = htmlStr; - } catch (Exception e) { - e.printStackTrace(); - } - return textStr;// 返回文本字符串 - } - - -} diff --git a/app/src/main/res/layout/activity_picture.xml b/app/src/main/res/layout/activity_picture.xml index c0994f9..a2a6150 100644 --- a/app/src/main/res/layout/activity_picture.xml +++ b/app/src/main/res/layout/activity_picture.xml @@ -76,7 +76,6 @@ android:layout_width="100dp" android:layout_height="wrap_content" android:text="结束采集" - android:visibility="gone" app:layout_constraintLeft_toRightOf="@id/capuretVideo" android:background="@drawable/uploding_shape" android:textColor="@color/colorBlue"/>