Jelajahi Sumber

文件下载测试

王育民 5 tahun lalu
induk
melakukan
7290138823

+ 0 - 51
.idea/assetWizardSettings.xml

@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="WizardSettings">
-    <option name="children">
-      <map>
-        <entry key="imageWizard">
-          <value>
-            <PersistentState />
-          </value>
-        </entry>
-        <entry key="vectorWizard">
-          <value>
-            <PersistentState>
-              <option name="children">
-                <map>
-                  <entry key="vectorAssetStep">
-                    <value>
-                      <PersistentState>
-                        <option name="children">
-                          <map>
-                            <entry key="clipartAsset">
-                              <value>
-                                <PersistentState>
-                                  <option name="values">
-                                    <map>
-                                      <entry key="url" value="jar:file:/D:/Android-studio/plugins/android/lib/android.jar!/images/material_design_icons/action/ic_lock_black_24dp.xml" />
-                                    </map>
-                                  </option>
-                                </PersistentState>
-                              </value>
-                            </entry>
-                          </map>
-                        </option>
-                        <option name="values">
-                          <map>
-                            <entry key="outputName" value="ic_lock_black_24dp" />
-                            <entry key="sourceFile" value="C:\Users\Yumin" />
-                          </map>
-                        </option>
-                      </PersistentState>
-                    </value>
-                  </entry>
-                </map>
-              </option>
-            </PersistentState>
-          </value>
-        </entry>
-      </map>
-    </option>
-  </component>
-</project>

TEMPAT SAMPAH
.idea/caches/build_file_checksums.ser


+ 0 - 29
.idea/codeStyles/Project.xml

@@ -1,29 +0,0 @@
-<component name="ProjectCodeStyleConfiguration">
-  <code_scheme name="Project" version="173">
-    <Objective-C-extensions>
-      <file>
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
-      </file>
-      <class>
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
-        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
-      </class>
-      <extensions>
-        <pair source="cpp" header="h" fileNamingConvention="NONE" />
-        <pair source="c" header="h" fileNamingConvention="NONE" />
-      </extensions>
-    </Objective-C-extensions>
-  </code_scheme>
-</component>

+ 0 - 18
.idea/gradle.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GradleSettings">
-    <option name="linkedExternalProjectsSettings">
-      <GradleProjectSettings>
-        <option name="distributionType" value="DEFAULT_WRAPPED" />
-        <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="modules">
-          <set>
-            <option value="$PROJECT_DIR$" />
-            <option value="$PROJECT_DIR$/app" />
-          </set>
-        </option>
-        <option name="resolveModulePerSourceSet" value="false" />
-      </GradleProjectSettings>
-    </option>
-  </component>
-</project>

+ 0 - 103
.idea/misc.xml

@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="MarkdownProjectSettings">
-    <PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true">
-      <PanelProvider>
-        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" />
-      </PanelProvider>
-    </PreviewSettings>
-    <ParserSettings gitHubSyntaxChange="false">
-      <PegdownExtensions>
-        <option name="ABBREVIATIONS" value="false" />
-        <option name="ANCHORLINKS" value="true" />
-        <option name="ASIDE" value="false" />
-        <option name="ATXHEADERSPACE" value="true" />
-        <option name="AUTOLINKS" value="true" />
-        <option name="DEFINITIONS" value="false" />
-        <option name="DEFINITION_BREAK_DOUBLE_BLANK_LINE" value="false" />
-        <option name="FENCED_CODE_BLOCKS" value="true" />
-        <option name="FOOTNOTES" value="false" />
-        <option name="HARDWRAPS" value="false" />
-        <option name="HTML_DEEP_PARSER" value="false" />
-        <option name="INSERTED" value="false" />
-        <option name="QUOTES" value="false" />
-        <option name="RELAXEDHRULES" value="true" />
-        <option name="SMARTS" value="false" />
-        <option name="STRIKETHROUGH" value="true" />
-        <option name="SUBSCRIPT" value="false" />
-        <option name="SUPERSCRIPT" value="false" />
-        <option name="SUPPRESS_HTML_BLOCKS" value="false" />
-        <option name="SUPPRESS_INLINE_HTML" value="false" />
-        <option name="TABLES" value="true" />
-        <option name="TASKLISTITEMS" value="true" />
-        <option name="TOC" value="false" />
-        <option name="WIKILINKS" value="true" />
-      </PegdownExtensions>
-      <ParserOptions>
-        <option name="COMMONMARK_LISTS" value="true" />
-        <option name="DUMMY" value="false" />
-        <option name="EMOJI_SHORTCUTS" value="true" />
-        <option name="FLEXMARK_FRONT_MATTER" value="false" />
-        <option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="false" />
-        <option name="GFM_TABLE_RENDERING" value="true" />
-        <option name="GITBOOK_URL_ENCODING" value="false" />
-        <option name="GITHUB_EMOJI_URL" value="false" />
-        <option name="GITHUB_LISTS" value="false" />
-        <option name="GITHUB_WIKI_LINKS" value="true" />
-        <option name="JEKYLL_FRONT_MATTER" value="false" />
-        <option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
-      </ParserOptions>
-    </ParserSettings>
-    <HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true">
-      <GeneratorProvider>
-        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
-      </GeneratorProvider>
-      <headerTop />
-      <headerBottom />
-      <bodyTop />
-      <bodyBottom />
-    </HtmlSettings>
-    <CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssTextEnabled="false" isDynamicPageWidth="true">
-      <StylesheetProvider>
-        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" />
-      </StylesheetProvider>
-      <ScriptProviders />
-      <cssText />
-    </CssSettings>
-    <HtmlExportSettings updateOnSave="false" parentDir="$ProjectFileDir$" targetDir="$ProjectFileDir$" cssDir="" scriptDir="" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetExt="" useTargetExt="false" noCssNoScripts="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" />
-    <LinkMapSettings>
-      <textMaps />
-    </LinkMapSettings>
-  </component>
-  <component name="NullableNotNullManager">
-    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
-    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
-    <option name="myNullables">
-      <value>
-        <list size="5">
-          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
-          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
-          <item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
-          <item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
-          <item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
-        </list>
-      </value>
-    </option>
-    <option name="myNotNulls">
-      <value>
-        <list size="4">
-          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
-          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
-          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
-          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
-        </list>
-      </value>
-    </option>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/build/classes" />
-  </component>
-  <component name="ProjectType">
-    <option name="id" value="Android" />
-  </component>
-</project>

+ 0 - 12
.idea/runConfigurations.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RunConfigurationProducerService">
-    <option name="ignoredProducers">
-      <set>
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
-        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
-      </set>
-    </option>
-  </component>
-</project>

+ 0 - 6
.idea/vcs.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
-</project>

+ 3 - 0
app/src/main/AndroidManifest.xml

@@ -5,6 +5,9 @@
 
     <!-- 完全的网络访问权限 -->
     <uses-permission android:name="android.permission.INTERNET" />
+    <!-- SD 卡写入权限 -->
+     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 
     <application
         android:name=".ctrl.App"

+ 51 - 1
app/src/main/java/cn/minbb/InterfaceTest/EntranceActivity.java

@@ -1,10 +1,12 @@
 package cn.minbb.InterfaceTest;
 
 import android.os.Bundle;
+import android.os.Environment;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.app.AppCompatDelegate;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -16,13 +18,23 @@ import com.android.volley.Request;
 import com.android.volley.toolbox.StringRequest;
 import com.joanzapata.iconify.widget.IconTextView;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
 import cn.minbb.InterfaceTest.ctrl.App;
+import cn.minbb.InterfaceTest.ctrl.PermissionManager;
 import cn.minbb.InterfaceTest.views.LoginActivity;
 import cn.minbb.InterfaceTest.views.MainActivity;
 import cn.minbb.InterfaceTest.views.RegisterActivity;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.OkHttpClient;
+import okhttp3.Response;
 
 public class EntranceActivity extends AppCompatActivity {
 
@@ -47,10 +59,11 @@ public class EntranceActivity extends AppCompatActivity {
         setContentView(R.layout.activity_entrance);
         ButterKnife.bind(this);
         App.setupActionBar(this);
+        new PermissionManager(this).addPermission("").checkAndRequestPermissions();
         testServerStatus();
     }
 
-    @OnClick({R.id.dataInterface, R.id.registerInterface, R.id.loginInterface, R.id.serverStatusRefresh})
+    @OnClick({R.id.dataInterface, R.id.registerInterface, R.id.loginInterface, R.id.downloadFile, R.id.serverStatusRefresh})
     public void onViewClicked(View view) {
         switch (view.getId()) {
             case R.id.dataInterface:
@@ -62,6 +75,43 @@ public class EntranceActivity extends AppCompatActivity {
             case R.id.loginInterface:
                 LoginActivity.start(EntranceActivity.this);
                 break;
+            case R.id.downloadFile:
+                String url = "https://files-1252373323.cos.ap-beijing.myqcloud.com/Iconify.apk";
+                OkHttpClient client = new OkHttpClient();
+                okhttp3.Request request = new okhttp3.Request.Builder().get().url(url).build();
+                Call call = client.newCall(request);
+                call.enqueue(new Callback() {
+                    @Override
+                    public void onFailure(Call call, IOException e) {
+                        e.printStackTrace();
+                        Log.e("more", "onFailure: " + e);
+                    }
+
+                    @Override
+                    public void onResponse(Call call, Response response) throws IOException {
+                        //  String dirName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/LungFile";
+                        String dirName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AAAFile";
+                        File file = new File(dirName);
+                        if (!file.exists()) {
+                            file.mkdir();
+                        }
+                        File fileTxt = new File(dirName + "/Iconify.apk");
+                        if (response != null) {
+                            InputStream is = response.body().byteStream();
+                            FileOutputStream fos = new FileOutputStream(fileTxt);
+                            int len = 0;
+                            byte[] buffer = new byte[2048];
+                            while (-1 != (len = is.read(buffer))) {
+                                fos.write(buffer, 0, len);
+                            }
+                            fos.flush();
+                            fos.close();
+                            is.close();
+                        }
+                        Log.d("more", "下载完毕 " + fileTxt.getAbsolutePath());
+                    }
+                });
+                break;
             case R.id.serverStatusRefresh:
                 testServerStatus();
                 break;

+ 76 - 0
app/src/main/java/cn/minbb/InterfaceTest/ctrl/PermissionManager.java

@@ -0,0 +1,76 @@
+package cn.minbb.InterfaceTest.ctrl;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.pm.PackageManager;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+// 动态申请权限
+public class PermissionManager {
+
+    private Activity activity;
+
+    // 定义一个list,用于存储需要申请的权限
+    private ArrayList<String> permissionList = new ArrayList<>();
+    private int PERMISSIONS_REQUEST = 10000;
+
+    public PermissionManager(Activity activity) {
+        this.activity = activity;
+    }
+
+    public PermissionManager addPermission(String permission) {
+        permissionList.add(Manifest.permission.CAMERA);
+        permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
+        permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+        return this;
+    }
+
+    // 调用封装好的申请权限的方法
+    public void checkAndRequestPermissions() {
+        ArrayList<String> list = new ArrayList<>(permissionList);
+        Iterator<String> iterator = list.iterator();
+        while (iterator.hasNext()) {
+            String permission = iterator.next();
+            // 检查权限是否已经申请
+            int hasPermission = ContextCompat.checkSelfPermission(activity, permission);
+            if (hasPermission == PackageManager.PERMISSION_GRANTED) {
+                iterator.remove();
+            }
+        }
+        /**
+         补充说明:
+         ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO);
+         对于原生Android,如果用户选择了“不再提示”,那么shouldShowRequestPermissionRationale就会为true。
+         此时,用户可以弹出一个对话框,向用户解释为什么需要这项权限。
+         对于一些深度定制的系统,如果用户选择了“不再提示”,那么shouldShowRequestPermissionRationale永远为false
+         */
+        if (list.size() != 0) {
+            String[] permissions = list.toArray(new String[0]);
+            // 正式请求权限
+            ActivityCompat.requestPermissions(activity, permissions, PERMISSIONS_REQUEST);
+        }
+    }
+
+    public void checkAndRequestPermissions(ArrayList<String> permissionList) {
+        ArrayList<String> list = new ArrayList<>(permissionList);
+        Iterator<String> iterator = list.iterator();
+        while (iterator.hasNext()) {
+            String permission = iterator.next();
+            // 检查权限是否已经申请
+            int hasPermission = ContextCompat.checkSelfPermission(activity, permission);
+            if (hasPermission == PackageManager.PERMISSION_GRANTED) {
+                iterator.remove();
+            }
+        }
+
+        if (list.size() != 0) {
+            String[] permissions = list.toArray(new String[0]);
+            // 正式请求权限
+            ActivityCompat.requestPermissions(activity, permissions, PERMISSIONS_REQUEST);
+        }
+    }
+}

+ 6 - 1
app/src/main/res/layout/activity_entrance.xml

@@ -28,6 +28,12 @@
             android:layout_height="wrap_content"
             android:text="登录接口测试" />
 
+        <Button
+            android:id="@+id/downloadFile"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="下载文件" />
+
         <RelativeLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
@@ -37,7 +43,6 @@
                 android:id="@+id/serverStatusTip"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_below="@id/losePassword"
                 android:layout_marginTop="16dp"
                 android:text="{fa-server} 服务器状态:" />
 

+ 1 - 1
build.gradle

@@ -7,7 +7,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.2.0'
+        classpath 'com.android.tools.build:gradle:3.5.0'
         
 
         // NOTE: Do not place your application dependencies here; they belong

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Tue Oct 09 22:09:47 CST 2018
+#Tue Sep 17 16:04:18 CST 2019
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip