短视频直播系统,动态内的图片实现长按保存
短视频直播系统,动态内的图片实现长按保存的相关代码
1.对于权限的注册
1 | <br> <uses-permission android:name= "android.permission.READ_EXTERNAL_STORAGE" /> <br> <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" /><br> <uses-permission android:name= "android.permission.INTERNET" /> |
2.工具类
1 | <br> public class DonwloadSaveImg {<br> private static Context context;<br> private static String filePath;<br> private static Bitmap mBitmap;<br> private static String mSaveMessage = "失败" ;<br> private final static String TAG = "PictureActivity" ;<br> private static ProgressDialog mSaveDialog = null;<br> public static void donwloadImg(Context contexts, String filePaths) {<br> context = contexts;<br> filePath = filePaths;<br> mSaveDialog = ProgressDialog.show(context, "保存图片" , "图片正在保存中,请稍等..." , true);<br> new Thread(saveFileRunnable).start();<br> }<br> private static Runnable saveFileRunnable = new Runnable() {<br> @Override<br> public void run() {<br> try {<br> if (!TextUtils.isEmpty(filePath)) { //网络图片<br> // 对资源链接<br> URL url = new URL(filePath);<br> //打开输入流<br> InputStream inputStream = url.openStream();<br> //对网上资源进行下载转换位图图片<br> mBitmap = BitmapFactory.decodeStream(inputStream);<br> inputStream.close();<br> }<br> saveFile(mBitmap);<br> mSaveMessage = "图片保存成功!";<br> } catch (IOException e) {<br> mSaveMessage = "图片保存失败!";<br> e.printStackTrace();<br> } catch (Exception e) {<br> e.printStackTrace();<br> }<br> messageHandler.sendMessage(messageHandler.obtainMessage());<br> }<br> };<br> private static Handler messageHandler = new Handler() {<br> @Override<br> public void handleMessage(Message msg) {<br> mSaveDialog.dismiss();<br> Log.d(TAG, mSaveMessage);<br> Toast.makeText(context, mSaveMessage, Toast.LENGTH_SHORT).show();<br> }<br> };<br> /**<br> * 保存图片<br> * @param bm<br> * @throws IOException<br> */<br> public static void saveFile(Bitmap bm ) throws IOException {<br> File dirFile = new File(Environment.getExternalStorageDirectory().getPath());<br> if (!dirFile.exists()) {<br> dirFile.mkdir();<br> }<br> String fileName = UUID.randomUUID().toString() + ".jpg";<br> File myCaptureFile = new File(Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/" + fileName);<br> BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));<br> bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);<br> bos.flush();<br> bos.close();<br> //把图片保存后声明这个广播事件通知系统相册有新图片到来<br> Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);<br> Uri uri = Uri.fromFile(myCaptureFile);<br> intent.setData(uri);<br> context.sendBroadcast(intent);<br> } |
3.主活动中权限的判断以及保存图片
1 | <br> public class Main2Activity extends AppCompatActivity {<br> private static int REQUEST_PERMISSION_CODE = 1;<br> private String path= "https://www.baidu.com/img/bd_logo1.png?where=super" ;<br> @Override<br> protected void onCreate(Bundle savedInstanceState) {<br> super.onCreate(savedInstanceState);<br> setContentView(R.layout.activity_main2);<br> checkPermission();<br> }<br> private void checkPermission() {<br> //检查权限(NEED_PERMISSION)是否被授权 PackageManager.PERMISSION_GRANTED表示同意授权<br> if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)<br> != PackageManager.PERMISSION_GRANTED) {<br> //用户已经拒绝过一次,再次弹出权限申请对话框需要给用户一个解释<br> if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission<br> .WRITE_EXTERNAL_STORAGE)) {<br> Toast.makeText(this, "请开通相关权限,否则无法正常使用本应用!" , Toast.LENGTH_SHORT).show();<br> }<br> //申请权限<br> ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE);<br> } else {<br> Toast.makeText(this, "授权成功!" , Toast.LENGTH_SHORT).show();<br> Log.e( "aaaaa" , "checkPermission: 已经授权!" );<br> }<br> }<br> public void write(View view) { //按钮的点击事件<br> DonwloadSaveImg.donwloadImg(Main2Activity.this,path);//iPath<br> }<br>} |
以上就是短视频直播系统,动态内的图片实现长按保存的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现