From a6677dc0b037de90fec2987f5a490f896cb17e76 Mon Sep 17 00:00:00 2001 From: SiberiaDante <994537867@qq.com> Date: Fri, 15 Sep 2017 11:56:52 +0800 Subject: [PATCH] SDCardUtil --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- sample/src/main/AndroidManifest.xml | 2 +- .../sample/ui/activity/WebVideoActivity.java | 166 ++++++++++++++++++ .../ui/activity/util/SDCardUtilActivity.java | 29 ++- .../com/sample/ui/fragment/ViewFragment.java | 2 + .../main/res/layout/activity_web_video.xml | 12 ++ .../com/siberiadante/lib/util/SDCardUtil.java | 150 ++++++++++++---- 8 files changed, 325 insertions(+), 42 deletions(-) create mode 100644 sample/src/main/java/com/sample/ui/activity/WebVideoActivity.java create mode 100644 sample/src/main/res/layout/activity_web_video.xml diff --git a/build.gradle b/build.gradle index f367c22..ab3481a 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9749071..4c6ab13 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Sep 05 12:03:48 CST 2017 +#Fri Sep 15 10:45:07 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 1087214..3ee4cf3 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -63,7 +63,7 @@ android:name=".ui.activity.view.KeyBoardActivity" android:windowSoftInputMode="adjustResize" /> - + \ No newline at end of file diff --git a/sample/src/main/java/com/sample/ui/activity/WebVideoActivity.java b/sample/src/main/java/com/sample/ui/activity/WebVideoActivity.java new file mode 100644 index 0000000..c7d0b7e --- /dev/null +++ b/sample/src/main/java/com/sample/ui/activity/WebVideoActivity.java @@ -0,0 +1,166 @@ +package com.sample.ui.activity; + +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.os.Message; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; + +import com.sample.R; + +public class WebVideoActivity extends BaseActivity { + private FrameLayout mFrameLayout; + private WebView mWebView; + private InsideWebChromeClient mInsideWebChromeClient; + //private JavascriptInterface javascriptInterface; + private String URL = "http://www.chinichi.cn/news/index/app_detail.html?id=2362"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // 1 + requestWindowFeature(Window.FEATURE_NO_TITLE); + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_web_video); + // 2 + mFrameLayout = (FrameLayout) findViewById(R.id.mFrameLayout); + mWebView = (WebView) findViewById(R.id.mWebView); + // 3 + initWebView(); + mWebView.loadUrl(URL); + } + + private void initWebView() { + WebSettings settings = mWebView.getSettings(); + settings.setJavaScriptEnabled(true); + settings.setJavaScriptCanOpenWindowsAutomatically(true); + settings.setPluginState(WebSettings.PluginState.ON); + //settings.setPluginsEnabled(true); + settings.setAllowFileAccess(true); + settings.setLoadWithOverviewMode(true); + settings.setUseWideViewPort(true); + settings.setAppCacheEnabled(false); +// settings.setCacheMode(WebSettings.LOAD_NO_CACHE); +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); + mInsideWebChromeClient = new InsideWebChromeClient(); + InsideWebViewClient mInsideWebViewClient = new InsideWebViewClient(); + //javascriptInterface = new JavascriptInterface(); + //mWebView.addJavascriptInterface(javascriptInterface, "java2js_laole918"); + mWebView.setWebChromeClient(mInsideWebChromeClient); + mWebView.setWebViewClient(mInsideWebViewClient); + } + + private class InsideWebChromeClient extends WebChromeClient { + private View mCustomView; + private CustomViewCallback mCustomViewCallback; + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + super.onShowCustomView(view, callback); + if (mCustomView != null) { + callback.onCustomViewHidden(); + return; + } + mCustomView = view; + mFrameLayout.addView(mCustomView); + mCustomViewCallback = callback; + mWebView.setVisibility(View.GONE); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + + public void onHideCustomView() { + mWebView.setVisibility(View.VISIBLE); + if (mCustomView == null) { + return; + } + mCustomView.setVisibility(View.GONE); + mFrameLayout.removeView(mCustomView); + mCustomViewCallback.onCustomViewHidden(); + mCustomView = null; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + super.onHideCustomView(); + } + + @Override + public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { + mWebView = new WebView(view.getContext()); + view.addView(mWebView); + WebSettings settings = mWebView.getSettings(); + settings.setJavaScriptEnabled(true); + mWebView.setWebViewClient(new WebViewClient()); + mWebView.setWebChromeClient(this); + + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(mWebView); + resultMsg.sendToTarget(); + return true; + } + } + + private class InsideWebViewClient extends WebViewClient { + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + // TODO Auto-generated method stub + view.loadUrl(url); + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + //mWebView.loadUrl(javascript); + } + + } + + @Override + public void onConfigurationChanged(Configuration config) { + super.onConfigurationChanged(config); + switch (config.orientation) { + case Configuration.ORIENTATION_LANDSCAPE: + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + break; + case Configuration.ORIENTATION_PORTRAIT: + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + break; + } + } + + @Override + public void onPause() { + super.onPause(); + mWebView.onPause(); + } + + @Override + public void onResume() { + super.onResume(); + mWebView.onResume(); + } + + @Override + public void onBackPressed() { + if (mWebView.canGoBack()) { + mWebView.goBack(); + return; + } + super.onBackPressed(); + } + + @Override + public void onDestroy() { + mWebView.destroy(); + super.onDestroy(); + } + +} diff --git a/sample/src/main/java/com/sample/ui/activity/util/SDCardUtilActivity.java b/sample/src/main/java/com/sample/ui/activity/util/SDCardUtilActivity.java index c831088..2e232ab 100644 --- a/sample/src/main/java/com/sample/ui/activity/util/SDCardUtilActivity.java +++ b/sample/src/main/java/com/sample/ui/activity/util/SDCardUtilActivity.java @@ -18,12 +18,16 @@ protected void onCreate(Bundle savedInstanceState) { final StringBuilder builder = new StringBuilder(); builder.append("---判断SD卡是否可用---" + SDCardUtil.isSDCardMounted()); builder.append("\n"); + builder.append("---判断SDCard是否可拆卸---" + SDCardUtil.isSDCarfRemovable()); + builder.append("\n"); builder.append("---getExternalStorageState---" + SDCardUtil.getExternalStorageState()); builder.append("\n"); builder.append("---获取SD卡的根目录---" + SDCardUtil.getSDCardBaseDir()); builder.append("\n"); builder.append("---获取SD卡的根目录---" + SDCardUtil.getSDCardPath()); builder.append("\n"); + builder.append("---获取SD卡data路径---" + SDCardUtil.getDataPath()); + builder.append("\n"); builder.append("---获取SD卡的信息---" + SDCardUtil.getSDCardInfo()); builder.append("\n"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { @@ -39,15 +43,34 @@ protected void onCreate(Bundle savedInstanceState) { builder.append("\n"); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - builder.append("---获取SD卡的剩余空间大小---" + SDCardUtil.getSDCardFreeSizeMB()+ " MB"); + builder.append("---获取SD卡的剩余空间大小---" + SDCardUtil.getSDCardFreeSizeMB() + " MB"); builder.append("\n"); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - builder.append("---获取SD卡的可用空间大小---" + SDCardUtil.getSDCardAvailableSizeMB()+ " MB"); + builder.append("---获取SD卡的可用空间大小---" + SDCardUtil.getSDCardAvailableSizeMB() + " MB"); builder.append("\n"); } - builder.append("---获取SD卡data路径---" + SDCardUtil.getDataPath()); + + builder.append("---获取SD卡私有Cache目录的路径---" + SDCardUtil.getSDCardPrivateCacheDir()); + builder.append("\n"); + builder.append("---判断路径文件是否存在---" + SDCardUtil.isFileExist(SDCardUtil.getDataPath())); + builder.append("\n"); + builder.append("---获取当前程序路径 应用在内存上的目录---" + SDCardUtil.getCurrentAppStoragePath()); + builder.append("\n"); + builder.append("---应用的在内存上的缓存目录---" + SDCardUtil.getCurrentAppCachePath()); builder.append("\n"); + builder.append("---应用在外部存储上的目录---" + SDCardUtil.getCurrentAppExternalStoragePath()); + builder.append("\n"); + builder.append("---应用的在外部存储上的缓存目录---" + SDCardUtil.getCurrentAppExternalCachePath()); + builder.append("\n"); + builder.append("---获取该程序的安装包路径---" + SDCardUtil.getCurrentAppPackageResourcePath()); + builder.append("\n"); + builder.append("---获取程序默认数据库路径---" + SDCardUtil.getCurrentAppDatabasePath("sample")); + builder.append("\n"); + builder.append("---获取下载文件存储路径---" + SDCardUtil.getDownloadCachePath()); + builder.append("\n"); + + t.setText(builder.toString()); } } diff --git a/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java b/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java index f6ef0f3..ded78f0 100644 --- a/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java +++ b/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java @@ -16,6 +16,7 @@ import com.sample.adapter.CustomAdapter; import com.sample.bean.UtilData; import com.sample.ui.BaseFragment; +import com.sample.ui.activity.WebVideoActivity; import com.sample.ui.activity.util.ActivityUtilActivity; import com.sample.ui.activity.util.AppActivity; import com.sample.ui.activity.util.ClearActivity; @@ -91,6 +92,7 @@ protected void initData() { datas.add(new UtilData("Shape封装的View测试", ShapeViewActivity.class.getName())); datas.add(new UtilData("点击View切换软件盘测试", KeyBoardActivity.class.getName())); datas.add(new UtilData("QQ运动计步器View", QQStepViewActivity.class.getName())); + datas.add(new UtilData("WebVideoActivity", WebVideoActivity.class.getName())); adapter.addAll(datas); } diff --git a/sample/src/main/res/layout/activity_web_video.xml b/sample/src/main/res/layout/activity_web_video.xml new file mode 100644 index 0000000..90ce799 --- /dev/null +++ b/sample/src/main/res/layout/activity_web_video.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/siberiadante/src/main/java/com/siberiadante/lib/util/SDCardUtil.java b/siberiadante/src/main/java/com/siberiadante/lib/util/SDCardUtil.java index 40a8deb..8f58eae 100644 --- a/siberiadante/src/main/java/com/siberiadante/lib/util/SDCardUtil.java +++ b/siberiadante/src/main/java/com/siberiadante/lib/util/SDCardUtil.java @@ -48,6 +48,15 @@ public static boolean isSDCardMounted() { return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); } + /** + * 判断SDCard是否可拆卸 + * + * @return + */ + public static boolean isSDCarfRemovable() { + return Environment.isExternalStorageRemovable(); + } + /** * 获取SD卡的根目录 * @@ -251,6 +260,72 @@ public static String getDataPath() { return Environment.getExternalStorageDirectory().getPath() + File.separator + "data" + File.separator; } + /** + * 获取下载文件存储路径 + * + * @return + */ + public static String getDownloadCachePath() { + return Environment.getDownloadCacheDirectory().toString(); + } + + /** + * 获取当前程序路径 应用在内存上的目录 :/data/data/com.sample/files + * + * @return + */ + public static String getCurrentAppStoragePath() { + return SiberiaDanteLib.getContext().getFilesDir().toString(); + } + + /** + * 应用的在内存上的缓存目录 :/data/data/com.sample/cache + * + * @return + */ + public static String getCurrentAppCachePath() { + return SiberiaDanteLib.getContext().getCacheDir().toString(); + } + + /** + * 应用在外部存储上的目录 :/storage/emulated/0/Android/data/com.sample/files/Movies + * + * @return + */ + public static String getCurrentAppExternalStoragePath() { + return SiberiaDanteLib.getContext().getExternalFilesDir(Environment.DIRECTORY_MOVIES).toString(); + } + + /** + * 应用的在外部存储上的缓存目录 :/storage/emulated/0/Android/data/com.sample/cache + * + * @return + */ + public static String getCurrentAppExternalCachePath() { + return SiberiaDanteLib.getContext().getExternalCacheDir().toString(); + } + + + /** + * 获取该程序的安装包路径 :/data/app/com.sample-1.apk + * + * @return + */ + + public static String getCurrentAppPackageResourcePath() { + return SiberiaDanteLib.getContext().getPackageResourcePath(); + } + + /** + * 获取程序默认数据库路径 :/data/data/com.sample/databases/ + * + * @param dataName + * @return + */ + public static String getCurrentAppDatabasePath(String dataName) { + return SiberiaDanteLib.getContext().getDatabasePath(dataName).toString(); + } + /** * 获取SD卡信息 * @@ -272,30 +347,10 @@ public static String getSDCardInfo() { return sd.toString(); } - public static class SDCardInfo { - boolean isExist; - long totalBlocks; - long freeBlocks; - long availableBlocks; - long blockByteSize; - long totalBytes; - long freeBytes; - long availableBytes; - - @Override - public String toString() { - return "isExist=" + isExist + - "\ntotalBlocks=" + totalBlocks + - "\nfreeBlocks=" + freeBlocks + - "\navailableBlocks=" + availableBlocks + - "\nblockByteSize=" + blockByteSize + - "\ntotalBytes=" + totalBytes + - "\nfreeBytes=" + freeBytes + - "\navailableBytes=" + availableBytes; - } - } //---start---2017-09-14 + + // 往SD卡的公有目录下保存文件 public static boolean saveFileToSDCardPublicDir(byte[] data, String type, String fileName) { @@ -479,6 +534,22 @@ public Bitmap loadBitmapFromSDCard(String filePath) { return null; } + + // 从sdcard中删除文件 + public static boolean removeFileFromSDCard(String filePath) { + File file = new File(filePath); + if (file.exists()) { + try { + file.delete(); + return true; + } catch (Exception e) { + return false; + } + } else { + return false; + } + } + // 获取SD卡公有目录的路径 public static String getSDCardPublicDir(String type) { return Environment.getExternalStoragePublicDirectory(type).toString(); @@ -495,6 +566,8 @@ public static String getSDCardPrivateFilesDir(String type) { } /** + * 判断路径文件是否存在 + * * @param filePath * @return */ @@ -503,19 +576,26 @@ public static boolean isFileExist(String filePath) { return file.isFile(); } - // 从sdcard中删除文件 - public static boolean removeFileFromSDCard(String filePath) { - File file = new File(filePath); - if (file.exists()) { - try { - file.delete(); - return true; - } catch (Exception e) { - return false; - } - } else { - return false; + public static class SDCardInfo { + boolean isExist; + long totalBlocks; + long freeBlocks; + long availableBlocks; + long blockByteSize; + long totalBytes; + long freeBytes; + long availableBytes; + + @Override + public String toString() { + return "isExist=" + isExist + + "\ntotalBlocks=" + totalBlocks + + "\nfreeBlocks=" + freeBlocks + + "\navailableBlocks=" + availableBlocks + + "\nblockByteSize=" + blockByteSize + + "\ntotalBytes=" + totalBytes + + "\nfreeBytes=" + freeBytes + + "\navailableBytes=" + availableBytes; } } - }