{"id":216,"date":"2024-03-23T11:47:12","date_gmt":"2024-03-23T03:47:12","guid":{"rendered":"https:\/\/www.jishuge.cn\/?p=216"},"modified":"2024-03-23T13:53:05","modified_gmt":"2024-03-23T05:53:05","slug":"android%e4%b8%8b%e8%bd%bd%e7%bd%91%e7%bb%9c%e5%9b%be%e7%89%87%e5%88%b0%e6%9c%ac%e5%9c%b0","status":"publish","type":"post","link":"https:\/\/blog.jishuge.cn\/?p=216","title":{"rendered":"Android\u4e0b\u8f7d\u7f51\u7edc\u56fe\u7247\u5230\u672c\u5730"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u7b2c\u4e00\u6b65\uff0c\u9700\u8981\u6dfb\u52a0\u6388\u6743<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> &lt;uses-permission android:name=\"android.permission.INTERNET\" \/>\n &lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"\n        android:maxSdkVersion=\"32\" \/>\n &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n        android:maxSdkVersion=\"32\"\n        tools:ignore=\"ScopedStorage\" \/><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e8c\u6b65\uff1a\u7f51\u7edc\u8bf7\u6c42\u7f51\u7edc\u56fe\u7247\u5730\u5740<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   val imageUrl = \"https:\/\/static.jikecrm.com\/2018-06-10\/152862233429525.jpg\"\n               val client = OkHttpClient()\n               val request = Request.Builder()\n                   .url(imageUrl)\n                   .build()\n               val call = client.newCall(request)\n\n               call.enqueue(object: Callback {\n                   override fun onFailure(call: Call, e: IOException) {\n                       Log.e(\"TAG\", \"onFailure: \u4e0b\u8f7d\u5931\u8d25\uff1a${e.message}\", )\n                   }\n\n                   override fun onResponse(call: Call, response: Response) {\n                       if(response.isSuccessful){\n                           val inputStream = response.body?.byteStream() ?: return\n                           DownLoadImage().saveImage(inputStream,context)\n                       }else{\n                           Log.e(\"TAG\", \"onResponse: \u4e0b\u8f7d\u5931\u8d25~~~~~~~\", )\n                       }\n                   }\n               })<\/pre>\n\n\n\n<p>\u5728\u534f\u7a0b\u4e2d\u53bb\u8bf7\u6c42\uff0c\u4e0d\u8981\u5728UI\u4e3b\u7ebf\u7a0b\u8bf7\u6c42\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b2c\u4e09\u6b65\u4fdd\u5b58\u56fe\u7247\u5230\u672c\u5730<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    fun saveImage(inputStream: InputStream, context: Context) {\n\n        val values = ContentValues().apply {\n            put(MediaStore.Images.Media.DISPLAY_NAME, \"tj_${System.currentTimeMillis()}.jpg\") \/\/ \u56fe\u7247\u6587\u4ef6\u540d\n            put(MediaStore.Images.Media.MIME_TYPE, \"image\/jpeg\") \/\/ \u56fe\u7247MIME\u7c7b\u578b\n            put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES) \/\/ \u5b58\u50a8\u76ee\u5f55\uff0c\u6b64\u5904\u4e3aPictures\n        }\n\n        val uri = context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)\n        if (uri == null) {\n            \/\/ \u521b\u5efa\u6587\u4ef6\u5931\u8d25\uff0c\u5904\u7406\u9519\u8bef\n            Log.e(\"DownLoad\", \"saveImage: \u521b\u5efa\u6587\u4ef6\u5931\u8d25\")\n            return\n        }\n\n        try {\n            val fos = context.contentResolver.openOutputStream(uri, \"w\") ?: return\n            val buffer = ByteArray(4 * 1024)\n            var read: Int\n            while (inputStream.read(buffer).also { read = it } != -1) {\n                fos.write(buffer, 0, read)\n            }\n            fos.close()\n            inputStream.close()\n\n            \/\/ \u66f4\u65b0\u5a92\u4f53\u6570\u636e\u5e93\uff0c\u4f7f\u56fe\u7247\u5728\u7cfb\u7edf\u76f8\u518c\u4e2d\u53ef\u89c1\n            MediaScannerConnection.scanFile(\n                context,\n                arrayOf(Environment.DIRECTORY_PICTURES),\n                null,\n                null\n            )\n            Log.i(\"DownLoad\", \"saveImage: \u4fdd\u5b58\u6210\u529f~~~\")\n        } catch (e: Exception) {\n            context.contentResolver.delete(uri, null, null)\n            Log.e(\"DownLoad\", \"saveImage: \u4fdd\u5b58\u5931\u8d25\uff1a${e.message}\")\n        }\n    }<\/pre>\n\n\n\n<p><strong>\u5982\u679c\u662f\u540c\u4e00\u5f20\u7f51\u7edc\u56fe\u7247\uff0c\u7cfb\u7edf\u9ed8\u8ba4\u662f\u8986\u76d6\u7684\u3002<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b2c\u4e00\u6b65\uff0c\u9700\u8981\u6dfb\u52a0\u6388\u6743 \u7b2c\u4e8c\u6b65\uff1a\u7f51\u7edc\u8bf7\u6c42\u7f51\u7edc\u56fe\u7247\u5730\u5740 \u5728\u534f\u7a0b\u4e2d\u53bb\u8bf7\u6c42\uff0c\u4e0d\u8981\u5728UI\u4e3b\u7ebf\u7a0b\u8bf7\u6c42\u3002 \u7b2c\u4e09\u6b65\u4fdd\u5b58\u56fe\u7247\u5230\u672c &hellip; <a href=\"https:\/\/blog.jishuge.cn\/?p=216\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">Android\u4e0b\u8f7d\u7f51\u7edc\u56fe\u7247\u5230\u672c\u5730<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":159,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,23],"tags":[],"class_list":["post-216","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-kotlin"],"_links":{"self":[{"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/posts\/216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=216"}],"version-history":[{"count":2,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/posts\/216\/revisions"}],"predecessor-version":[{"id":219,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/posts\/216\/revisions\/219"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=\/wp\/v2\/media\/159"}],"wp:attachment":[{"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jishuge.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}