(基于安卓app开发的毕业设计)智能手机图片管理.(附源码+论文)

news/2024/4/19 0:42:21

大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:安卓app毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀Java毕业设计
🌎微信小程序毕业设计

目录

  • 一、项目简介
  • 二、系统核心功能模块部分截图
    • 2.1用户登陆的设计与实现
    • 2.2分类相册功能
    • 2.3照片管理功能
    • 2.4 壁纸功能
  • 三、部分核心代码
    • 4.1 BaseActivity部分
    • 4.2File部分
  • 四、论文目录
  • 获取源码或论文

一、项目简介

随着手机性能的不断提升,虽然手机有了更大的内存,但日益增长的照片除了对硬件提出要求外,对管理也提出相应的挑战。不但数量太多,细节太多,分类复杂,还需要一张张打开才能鉴别,因此需要有专门的应用对照片进行分类管理。本研究项目基于Java语言和Android平台,搭建一款手机照片管理App,利用移动互联网技术解决上述问题。

二、系统核心功能模块部分截图

2.1用户登陆的设计与实现

用户通过APP提供的注册、登陆功能,实现使用其它核心功能的目的。应用逻辑为用户点击进入App,已注册用户输入手机号和密码进行用户登陆;新用户点击“注册”按钮进行用户注册,注册后通过用户名、密码实现登陆。
注册时用户编辑登陆名,编辑密码并进行二次确认,如果用户名合法且两次密码一致,则注册成功,用户注册信息写入数据库进行保存。
登录模块,用户输入电话号和密码后,由系统调用数据库相关信息,与用户输入的信息进行比较,如果结果一致,则认定为合法用户,登录成功。

2.2分类相册功能

这是本研究项目的核心功能,通过支持创建不同类别的相册,将照片进行合理分类,解决了图片归类步骤繁琐的痛点,方便分门别类的快速找到自己所需的照片。
App设计有添加相册功能,用户可以根据自己需要创建相册,并自主添加相应照片。具体效果如下图所示:

在这里插入图片描述

2.3照片管理功能

照片添加进相册之后,App还提供对照片的排序、添加照片描述、删除以及对照片缩放、旋转、保存等功能,用于对相册内照片的管理。具体实现效果如下:
在这里插入图片描述

2.4 壁纸功能

App还附带壁纸功能,用户可以根据各人喜好,将相册内的照片设置成手机壁纸,增加个性化需求。其开发效果如下图所示:
在这里插入图片描述

三、部分核心代码

4.1 BaseActivity部分


package com.android.socketdemo.base;import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;public abstract class BaseActivity extends FragmentActivity {private static final int REQUEST_CAMERA = 1000;private static final int IMAGE_REQUEST_CODE = 1001;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);checkPermission();}@TargetApi(Build.VERSION_CODES.M)private boolean checkPermission() {if(Build.VERSION.SDK_INT >= 23) {if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED&& checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED&& checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {return true;}String[] permistions = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};requestPermissions(permistions, 0);return false;}return true;}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);}public void photoDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(BaseActivity.this);builder.setMessage("请选择添加图片方式");//调用相机拍照builder.setPositiveButton("拍照", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (checkPermission()) {takePhoto();}} else {takePhoto();}}});//从相册里面取照片builder.setNegativeButton("相册", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {pickPhoto();}});builder.create().show();}protected void takePhoto() {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, REQUEST_CAMERA);}/**** 从相册中取图片*/protected void pickPhoto() {//AndroidImagePicker.getInstance().setSelectMode(AndroidImagePicker.Select_Mode.MODE_MULTI);Intent intent = new Intent(Intent.ACTION_PICK, null);//通过Intent 筛选所有的图片intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");startActivityForResult(intent, IMAGE_REQUEST_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);String path = "";if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {Bundle bundle0 = data.getExtras();Bitmap bitmap0 = (Bitmap) bundle0.get("data");File path0 = getFile(bitmap0);path = Uri.fromFile(path0).toString();uploadResult(path);} else if (requestCode == IMAGE_REQUEST_CODE && resultCode == RESULT_OK) {try {Cursor cursor0 =getContentResolver().query(data.getData(), new String[]{MediaStore.Images.Media.DATA}, null, null, null);cursor0.moveToFirst();String capturPath0 = cursor0.getString(cursor0.getColumnIndex(MediaStore.Images.Media.DATA));cursor0.close();uploadResult(Uri.fromFile(new File(capturPath0)).toString());} catch (Exception e) {e.printStackTrace();}}}public File getFile(Bitmap bitmap) {ByteArrayOutputStream baos = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);File file = new File(Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".png");try {file.createNewFile();FileOutputStream fos = new FileOutputStream(file);InputStream is = new ByteArrayInputStream(baos.toByteArray());int x = 0;byte[] b = new byte[1024 * 100];while ((x = is.read(b)) != -1) {fos.write(b, 0, x);}fos.close();} catch (Exception e) {e.printStackTrace();}return file;}private void upload(File file) {}public abstract void uploadResult(String path);
}

4.2File部分


package com.android.socketdemo.utils;import android.annotation.SuppressLint;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class FileUtils {/*** 根据URI获取文件真实路径(兼容多张机型)** @param context* @param uri* @return*/public static String getFilePathByUri(Context context, Uri uri) {if ("content".equalsIgnoreCase(uri.getScheme())) {int sdkVersion = Build.VERSION.SDK_INT;if (sdkVersion >= 19) { // api >= 19return getRealPathFromUriAboveApi19(context, uri);} else { // api < 19return getRealPathFromUriBelowAPI19(context, uri);}} else if ("file".equalsIgnoreCase(uri.getScheme())) {return uri.getPath();}return null;}/*** 适配api19及以上,根据uri获取图片的绝对路径** @param context 上下文对象* @param uri     图片的Uri* @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null*/@SuppressLint("NewApi")private static String getRealPathFromUriAboveApi19(Context context, Uri uri) {String filePath = null;if (DocumentsContract.isDocumentUri(context, uri)) {// 如果是document类型的 uri, 则通过document id来进行处理String documentId = DocumentsContract.getDocumentId(uri);if (isMediaDocument(uri)) { // MediaProvider// 使用':'分割String type = documentId.split(":")[0];String id = documentId.split(":")[1];String selection = MediaStore.Images.Media._ID + "=?";String[] selectionArgs = {id};//Uri contentUri = null;if ("image".equals(type)) {contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;} else if ("video".equals(type)) {contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;} else if ("audio".equals(type)) {contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;}filePath = getDataColumn(context, contentUri, selection, selectionArgs);} else if (isDownloadsDocument(uri)) { // DownloadsProviderUri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(documentId));filePath = getDataColumn(context, contentUri, null, null);} else if (isExternalStorageDocument(uri)) {// ExternalStorageProviderfinal String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final String type = split[0];if ("primary".equalsIgnoreCase(type)) {filePath = Environment.getExternalStorageDirectory() + "/" + split[1];}} else {//Log.e("路径错误");}} else if ("content".equalsIgnoreCase(uri.getScheme())) {// 如果是 content 类型的 UrifilePath = getDataColumn(context, uri, null, null);} else if ("file".equals(uri.getScheme())) {// 如果是 file 类型的 Uri,直接获取图片对应的路径filePath = uri.getPath();}return filePath;}/*** 适配api19以下(不包括api19),根据uri获取图片的绝对路径** @param context 上下文对象* @param uri     图片的Uri* @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null*/private static String getRealPathFromUriBelowAPI19(Context context, Uri uri) {return getDataColumn(context, uri, null, null);}/*** 获取数据库表中的 _data 列,即返回Uri对应的文件路径** @return*/private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {String path = null;String[] projection = new String[]{MediaStore.Images.Media.DATA};Cursor cursor = null;try {cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);if (cursor != null && cursor.moveToFirst()) {int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);path = cursor.getString(columnIndex);}} catch (Exception e) {if (cursor != null) {cursor.close();}}return path;}/*** @param uri the Uri to check* @return Whether the Uri authority is MediaProvider*/private static boolean isMediaDocument(Uri uri) {return "com.android.providers.media.documents".equals(uri.getAuthority());}private static boolean isExternalStorageDocument(Uri uri) {return "com.android.externalstorage.documents".equals(uri.getAuthority());}/*** @param uri the Uri to check* @return Whether the Uri authority is DownloadsProvider*/private static boolean isDownloadsDocument(Uri uri) {return "com.android.providers.downloads.documents".equals(uri.getAuthority());}// 指纹图片存放路径public static String sdCardDir = Environment.getExternalStorageDirectory() + "/fingerprintimages/";/*** 保存指纹图片** @param bitmap*/public static File saveBitmap(Context context, Bitmap bitmap) {try {File dirFile = new File(sdCardDir);if (!dirFile.exists()) {              //如果不存在,那就建立这个文件夹dirFile.mkdirs();}String name = System.currentTimeMillis() + "";File file = new File(sdCardDir, name + ".png");FileOutputStream fos = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(), name, null);return file;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}
}

四、论文目录

1.绪论 6
1.1研究背景 6
1.1.1 社区的概念 6
1.1.2 互联网社区的发展历程 6
1.2研究的意义 9
1.3 论文结构 10
2.项目可行性分析 11
2.1系统分析的方法 11
2.2系统可行性分析 12
2.3系统需求分析 13
2.3.1功能性需求分析 13
2.3.2非功能性需求分析 14
3.相关技术简介 16
3.1JAVA程序语言 16
3.1.1 Java简介 16
3.1.2 Java主要特性 17
3.2数据库 20
3.3 Android架构 23
3.3.1 Linux内核 24
3.3.2 程序库 24
3.3.3 Android程序库 25
3.3.4 应用框架 26
3.3.5 应用程序 26
4.系统设计实现 26
4.1 开发环境搭建 27
4.1.1 window系统安装java 27
4.1.2安装配置Android Studio 31
4.1.3创建Android Studio工程 31
4.2 系统功能设计 32
4.3数据结构设计 33
4.4系统详细实现 35
4.4.1 用户登陆的设计与实现 35
4.4.2 广场模块 37
4.4.3消息模块 38
4.4.4个人中心及后台管理 39
5.软件测试 40
5.1软件测试的目的 41
5.2 软件测试的常用方式 41
5.2.1静态测试和动态测试 41
5.2.2黑盒测试、白盒测试和灰盒测试 42
5.2.4手动测试和自动化测试 43
5.3测试用例 43
5.4测试结果 45
6.研究总结 45
参考文献 46
致 谢 47

获取源码或论文

如需对应的源码,可以评论或者私信都可以。


http://www.ppmy.cn/news/303195.html

相关文章

安卓手机主题软件_安卓必备APP大盘点:10款软件让你的手机脱胎换骨

相信许多使用安卓手机的朋友们对系统都多多少少有些怨念&#xff0c;流氓软件层出不穷、后台占用损耗严重、通知信息日益激增、拍照软件滤镜丑爆等一系列问题仿佛一块块心病常年压得安卓用户喘不过气来&#xff0c;不少安卓党也因此转投苹果。 不过还在使用安卓系统的用户们也不…

如何关闭OPPO手机服务器维护,使用OPPO手机,一定要关闭这3个功能,不然你的手机会越来越卡...

OPPO手机生活有不少的朋友都在用&#xff0c;当我们的手机出现卡顿问题的时候&#xff0c;该如何解决呢&#xff1f;今天我们就一起来看看吧。 1. 关闭用户体验计划 手机里有很多的默认设置&#xff0c;如果任由其开着&#xff0c;会在手机后台中无形般运行&#xff0c;不仅占用…

Android调用系统相机、自定义相机、处理大图片、android4.4版本后的不能拍照的处理

本博文主要是介绍了&#xff1a; ①android上使用相机进行拍照并显示的两种方式&#xff0c;调用系统相机和自定相机&#xff1b; ②涉及到Android加载大图片时候出现OOM的问题处理&#xff1b; ③还有简要提一下有些人SurfaceView出现黑屏的原因&#xff1b; ④Android4.4版本…

手机触屏长按测试软件,长按屏幕有惊喜?学会这9个小技巧,可以触发手机里的隐藏功能...

原标题&#xff1a;长按屏幕有惊喜&#xff1f;学会这9个小技巧&#xff0c;可以触发手机里的隐藏功能 在手机实体按键设计得越来越少的情况下&#xff0c;很多粉粉可能会感到很困惑&#xff0c;比如怎么才能一键打开某个功能呢&#xff1f;隐藏得很深的功能&#xff0c;又如何…

oppo手机android文件夹,使用OPPO手机,这3个功能一定要关闭,不然你的手机会越来越卡...

原标题&#xff1a;使用OPPO手机&#xff0c;这3个功能一定要关闭&#xff0c;不然你的手机会越来越卡 OPPO手机生活有不少的朋友都在用&#xff0c;当我们的手机出现卡顿问题的时候&#xff0c;该如何解决呢&#xff1f;今天我们就一起来看看吧。 1. 关闭用户体验计划 手机里有…

Android 手机展示照片 会有90°旋转的问题的解决方案

问题场景: 1.iOS系统的苹果手机竖屏拍照或者从相册选择竖屏情况下拍的照片上传到tfs服务器安卓手机下载展示的时候是旋转了90的图片,但是苹果手机展示没有问题. 我去网上进行原因的查找,发现iphone默认横屏拍照才是正确的方向,所以竖屏拍照会携带逆时针旋转90的信息. 经过多番…

windows phone 7 获取手机图片库中图片

WP7 获取图片库信息 前置条件&#xff1a;手机和电脑未连接或连接电脑Zune软件关闭&#xff08;与Zune软件连接时不允许访问图片库&#xff09;&#xff1b; 版本7.1 获取手机图片库图片的两种方式&#xff1a; PhotChooserTask方式和XNA方式进行获取 PhotChooserTask获取…

目前vivo手机最新android版本,vivo-智能手机官方网站

年年岁岁花相似&#xff0c;岁岁年年flag不同。每到年初&#xff0c;大家都会立下flag让新的一年盎然无比。所以2020年的第一个周末&#xff0c;大家立下的flag提上日程了吗&#xff1f; 没立上也没关系&#xff0c;先康康我们精心准备的蓝厂周报&#xff0c;再去想想新的一年要…

H5在移动端实现图片裁剪缩放功能

最近在做一个固定比例的框&#xff0c;去放大缩小图片&#xff0c;让用户去裁切图片的过程。 2018-03-29 目前的状态是画出了模型&#xff0c;并且可以在ios上实现放大缩小&#xff0c;使用gesturechange手势事件&#xff0c;但是安卓机不兼容&#xff0c;所以在找合适的解决方…

图Android 片缓存文件名,手机图片去了哪?教你理清照片存放路径

1拍完照片 你的手机图片去了哪? 打开手机的文件管理器,你经常会遇到这种情况,SD卡的根目录里放着Photo、Pictures、image和Camera这几个文件夹。虽然很多人的英语并不是很好,但也明白这几个文件夹都有“图片”的意思。很多时候我们来找手机图片时会不知所措,我的手机图片跑…

网络图片设置为手机背景

给手机上面的图片设置为背景 之前一直想做一个浏览汽车图片的app&#xff0c;并将自己喜欢的汽车图片设置成手机背景&#xff0c;因为一直在工作没有什么时间搞&#xff0c;现在自己写了一个mvp的小项目&#xff0c;虽然跟之前想到做汽车图片浏览app&#xff08;DanShiApp&…

来来来克拉

https://zhuanlan.zhihu.com/p/105512661

买过蓝科高新的在哪里

又接回了蓝科高新&#xff0c;希望这次依然给力&#x1f914;&#x1f914;&#x1f914;

早悟兰因(兰因絮果)

该词出自《锁麟囊》&#xff0c;其意大概为&#xff1a;早点参悟因果。 在我国古代山东一带&#xff0c;女儿出嫁上轿前&#xff0c;母亲要送一只绣有麒麟的荷包&#xff0c;里面装上珠宝首饰&#xff0c;希望女儿婚后早得贵子&#xff0c;这只荷包锦袋也叫做“锁麟囊”&#x…

国药集团获得美国默沙东公司新冠口服药“莫诺拉韦”经销权和独家进口权 | 美通社头条...

美通社消息&#xff1a;默沙东&#xff08;"默沙东"是美国新泽西州罗威市默克公司的公司商号&#xff09;和中国医药集团有限公司&#xff08;国药集团&#xff09;联合宣布&#xff0c;双方签署合作框架协议&#xff0c;默沙东将其和Ridgeback公司合作研发的抗新冠病…

默沙东两款抗HIV新药德思卓、沛卓在华上市;领星生物与青煜医药研发达成合作 | 医药健闻...

| 行业焦点 默沙东两款抗HIV新药德思卓、沛卓在华上市。默沙东(默沙东是美国新泽西州肯尼沃斯市默克公司的公司商号)宣布&#xff0c;其日服单片复方制剂德思卓(多拉米替片&#xff0c;多拉韦林100mg/拉米夫定300mg/富马酸替诺福韦二吡呋酯300mg&#xff0c;DOR/3TC/TDF)、日服…

迈蓝与辉瑞普强合并获得欧盟、澳大利亚和新西兰的批准

迈蓝公司&#xff08;NASDAQ:MYL&#xff09;和辉瑞公司&#xff08;Pfizer Inc.&#xff09;宣布&#xff0c;两家公司已收到欧盟委员会&#xff08;European Commission&#xff0c;EC&#xff09;关于迈蓝和辉瑞旗下普强(Upjohn)业务合并的最终批准。 欧盟委员会于2020年4月…

徐建团队:基于拉曼组的肿瘤单细胞药敏检测新方法

推荐阅读&#xff1a; 《用荧光素酶基因标记肿瘤细胞的实验步骤》 肿瘤药敏性检测方法学是抗癌药物评价和筛选的前提&#xff0c;也是临床化疗方案设计的基础。中国科学院青岛生物能源与过程研究所单细胞研究中心开发了基于拉曼组的肿瘤单细胞药敏检测新方法D2O-CANST-R&…

启德教育换帅:原CEO黄娴离职、金冉接任,曾多次冲击上市未果

1月25日&#xff0c;启德教育集团&#xff08;下称“启德教育”&#xff09;发布内部邮件宣布&#xff0c;全体董事已一致同意、批准CEO黄娴&#xff08;英文名Isa Wong&#xff09;辞去启德教育首席执行官&#xff08;CEO&#xff09;职务的请求。 启德教育称&#xff0c;黄娴…

磺基-CY5 马来酰亚胺 Cyanine5 Maleimide

磺基-CY5 马来酰亚胺 Cyanine5 Maleimide Cyanine5 maleimide是单一活性染料&#xff0c;有选择性的与硫醇基团&#xff08;比如蛋白和多肽的半胱氨酸&#xff09;结合以进行标记。我们使用水溶的Sulfo-Cyanine5 maleimide标记抗体和其他敏感蛋白。Cyanine5是Cy5的类似物&am…