1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package cn.flightfeather.thirdappmodule.util
 
import android.app.Activity
import android.app.Dialog
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentActivity
import android.support.v4.content.FileProvider
import android.webkit.MimeTypeMap
import cn.flightfeather.thirdappmodule.util.file.FileUtils
import com.flightfeather.taizhang.common.utils.download.UpDownloadUtil
import org.jetbrains.anko.toast
import java.io.File
import java.io.FileOutputStream
 
/**
 * 系统功能调用类
 * @author riku
 * Date: 2019/11/22
 */
object SystemServiceUtils {
 
    const val REQUEST_TAKE_PICTURE = 1000
 
    fun shootPhoto(activity: FragmentActivity, requestCode: Int): String {
        //拍照存放路径
        val mFilePath = getFilePath()
 
        val intent = getIntent(mFilePath, activity)
        activity.startActivityForResult(intent, requestCode)
        return mFilePath
    }
 
    fun shootPhoto(fragment: Fragment, requestCode: Int): String {
        //拍照存放路径
        return fragment.activity?.run {
            val mFilePath = getFilePath()
 
            val intent = getIntent(mFilePath, this)
            fragment.startActivityForResult(intent, requestCode)
            mFilePath
        } ?: ""
    }
 
    fun shareFile(activity: Activity?, path: String?) {
        if (path?.contains("http") == true) {
            var d: Dialog? = null
            activity?.let {
                d = DialogUtil2.showLoadingDialog(it, "下载中", false, null)
            }
            UpDownloadUtil.download(activity, path, FileUtils.getFileName(path), {
                d?.dismiss()
                share(activity, it)
            }, {
                activity?.toast("下载失败")
                d?.dismiss()
            })
        } else {
            share(activity, path)
        }
    }
 
    fun saveBitmap(path: String, bitmap: Bitmap): Boolean {
        val file = File(path)
        if (!file.parentFile.exists()) {
            file.parentFile.mkdirs()
        } else if (file.exists()) {
            file.delete()
        }
        try {
            val out = FileOutputStream(file)
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)
            out.flush()
            out.close()
            return true
        } catch (e: Throwable) {
            e.printStackTrace()
        }
 
        return false
    }
 
    private fun share(activity: Activity?, path: String?) {
        val uri = FileUtils.getUri(activity, path)
        val extension = FileUtils.getExtensionName(path)
        val intent = Intent().apply {
            action = Intent.ACTION_SEND
            putExtra(Intent.EXTRA_STREAM, uri)
            type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
        }
        activity?.startActivity(Intent.createChooser(intent, "分享文档"))
    }
 
    private fun getFilePath(): String {
        val fileDir = File(Environment.getExternalStorageDirectory(), "Pictures")
        if (!fileDir.exists()) {
            fileDir.mkdir()
        }
        return fileDir.absolutePath + "/IMG_" + System.currentTimeMillis() + ".jpg"
    }
 
    private fun getIntent(mFilePath: String, activity: FragmentActivity): Intent {
        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        val uri: Uri = if (Build.VERSION.SDK_INT >= 24) {
            FileProvider.getUriForFile(
                    activity,
                    activity.packageName + ".fileProvider",
                    File(mFilePath)
            )
        } else {
            Uri.fromFile(File(mFilePath))
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
        return intent
    }
}