From: snickersun Date: Sun, 26 Jul 2020 23:43:11 +0000 (+0800) Subject: 图片等发送,在做一半。 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=39ba9d797c5e8b7949b4b95db35c639683998b0f;p=protocol_srv.git 图片等发送,在做一半。 图片水印功能函数文件加上了,还没有看效果 --- diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index 3d4b576b..56a42f75 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -413,7 +413,7 @@ public class Config { noPPGSensor=(ICJniUtils.isPPGavailable()==0); - noTempSensor=(ICJniUtils.isTemperatureDevAvailable()==0); + // noTempSensor=(ICJniUtils.isTemperatureDevAvailable()==0); } diff --git a/app/src/main/java/com/enqualcomm/support/bean/Content.java b/app/src/main/java/com/enqualcomm/support/bean/Content.java index f4b60607..d21f334e 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/Content.java +++ b/app/src/main/java/com/enqualcomm/support/bean/Content.java @@ -54,6 +54,9 @@ public abstract class Content { public String serverTime; public int status; + + public int filetype; + public int datatype; protected Content(int _category, String _content, String _preview, int _status, int _inOrOut, int _contactCategory, String _contactNumber, String _serverTime, long _localtime) { this.category = _category; @@ -65,8 +68,24 @@ public abstract class Content { this.contactNumber = _contactNumber; this.serverTime = _serverTime; this.localTime = _localtime; + this.filetype=1; + this.datatype=1; + } + protected Content(int _category, String _content, String _preview, int _status, int _inOrOut, + int _contactCategory, String _contactNumber, String _serverTime, long _localtime, + int _filetype, int _datatype) { + this.category = _category; + this.content = _content; + this.preview = _preview; + this.status = _status; + this.inOrOut = _inOrOut; + this.contactCategory = _contactCategory; + this.contactNumber = _contactNumber; + this.serverTime = _serverTime; + this.localTime = _localtime; + this.filetype=_filetype; + this.datatype=_datatype; } - public String toString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("Content{category="); diff --git a/app/src/main/java/com/enqualcomm/support/bean/VoiceContent.java b/app/src/main/java/com/enqualcomm/support/bean/VoiceContent.java index 7bad9445..893931d2 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/VoiceContent.java +++ b/app/src/main/java/com/enqualcomm/support/bean/VoiceContent.java @@ -11,7 +11,12 @@ public class VoiceContent extends Content { super(1, _content, _preview, _status, _inOrOut, _contactCategory, _contactNumber, _serverTime, _localtime); } - + private VoiceContent(String _content, String _preview, int _status, int _inOrOut, int _contactCategory, String _contactNumber, String _serverTime, long _localtime,int _filetype, int _datatype) + { + super(1, _content, _preview, _status, _inOrOut, _contactCategory, _contactNumber, _serverTime, _localtime,_filetype,_datatype); + + } + public static VoiceContent from(VoiceContent _voiceContent, byte[] amrData, File amrFilepath,String servertime) { StringBuilder stringBuilder2 = new StringBuilder(); @@ -25,7 +30,23 @@ public class VoiceContent extends Content { _voiceContent.serverTime = servertime; return _voiceContent; } - + + + public static VoiceContent from(VoiceContent _voiceContent, byte[] amrData, File amrFilepath,String servertime,int filetype,int datatype) { + + StringBuilder stringBuilder2 = new StringBuilder(); +// stringBuilder2.append(str3); + stringBuilder2.append(".amr"); + String str1 = Util.saveFile(amrData, 0, amrData.length, amrFilepath, stringBuilder2.toString()); + int duration = Util.getDuration(str1); + _voiceContent.content = str1; + _voiceContent.preview = String.valueOf(duration); + _voiceContent.status = 2; + _voiceContent.serverTime = servertime; + _voiceContent.filetype=filetype; + _voiceContent.datatype=datatype; + return _voiceContent; + } public static VoiceContent placeHolderIn(int _contactCategory, String _contactNumber, String _content) { return new VoiceContent(_content, null, 1, 1, _contactCategory, _contactNumber, null, System.currentTimeMillis()); } @@ -33,5 +54,10 @@ public class VoiceContent extends Content { public static VoiceContent placeHolderOut(int _contactCategory, String _contactNumber, String _content) { return new VoiceContent(_content, null, 1, 2, _contactCategory, _contactNumber, null, System.currentTimeMillis()); } + + + public static VoiceContent placeHolderOut(int _contactCategory, String _contactNumber, String _content,int filetype,int datatype) { + return new VoiceContent(_content, null, 1, 2, _contactCategory, _contactNumber, null, System.currentTimeMillis(),filetype,datatype); + } } diff --git a/app/src/main/java/com/enqualcomm/support/service/AudioService.java b/app/src/main/java/com/enqualcomm/support/service/AudioService.java index 0d372ff1..942f9f33 100644 --- a/app/src/main/java/com/enqualcomm/support/service/AudioService.java +++ b/app/src/main/java/com/enqualcomm/support/service/AudioService.java @@ -3,14 +3,18 @@ package com.enqualcomm.support.service; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.media.MediaPlayer; +import android.media.MediaRecorder; import com.enqualcomm.support.utils.ICLogger; +import java.io.IOException; + public class AudioService implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { private MediaPlayer mMediaPlayer; private static AudioService mAudioService=null; + private static MediaRecorder mRecorder=null; public AudioService() { initMediaPlayer(); } public static AudioService getInstance(){ @@ -105,5 +109,29 @@ public class AudioService implements MediaPlayer.OnErrorListener, MediaPlayer.On if (this.mMediaPlayer != null && this.mMediaPlayer.isPlaying()) this.mMediaPlayer.stop(); } + + + + public void startRecord(String FileName) { + if (mRecorder==null) + mRecorder = new MediaRecorder(); + mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); + mRecorder.setOutputFile(FileName); + mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + try { + mRecorder.prepare(); + } catch (IOException e) { + ICLogger.e( "prepare() failed"); + } + mRecorder.start(); + } + + public void stopRecord( ) { + if (mRecorder!=null ) { + mRecorder.stop(); + mRecorder.release(); + } + } } diff --git a/app/src/main/java/com/enqualcomm/support/utils/ImageUtil.java b/app/src/main/java/com/enqualcomm/support/utils/ImageUtil.java new file mode 100644 index 00000000..da1d607c --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/utils/ImageUtil.java @@ -0,0 +1,268 @@ +package com.enqualcomm.support.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Rect; + +public class ImageUtil { + /** + * 设置水印图片在左上角 + * + * @param context 上下文 + * @param src + * @param watermark + * @param paddingLeft + * @param paddingTop + * @return + */ + public static Bitmap createWaterMaskLeftTop(Context context, Bitmap src, Bitmap watermark, int paddingLeft, int paddingTop) { + return createWaterMaskBitmap(src, watermark, + dp2px(context, paddingLeft), dp2px(context, paddingTop)); + } + + private static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark, int paddingLeft, int paddingTop) { + if (src == null) { + return null; + } + int width = src.getWidth(); + int height = src.getHeight(); + //创建一个bitmap + Bitmap newb = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图 + //将该图片作为画布 + Canvas canvas = new Canvas(newb); + //在画布 0,0坐标上开始绘制原始图片 + canvas.drawBitmap(src, 0, 0, null); + //在画布上绘制水印图片 + canvas.drawBitmap(watermark, paddingLeft, paddingTop, null); + // 保存 + canvas.save(Canvas.ALL_SAVE_FLAG); + // 存储 + canvas.restore(); + return newb; + } + + /** + * 设置水印图片在右下角 + * + * @param context 上下文 + * @param src + * @param watermark + * @param paddingRight + * @param paddingBottom + * @return + */ + public static Bitmap createWaterMaskRightBottom(Context context, Bitmap src, Bitmap watermark, int paddingRight, int paddingBottom) { + return createWaterMaskBitmap(src, watermark, + src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight), + src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom)); + } + + /** + * 设置水印图片到右上角 + * + * @param context + * @param src + * @param watermark + * @param paddingRight + * @param paddingTop + * @return + */ + public static Bitmap createWaterMaskRightTop(Context context, Bitmap src, Bitmap watermark, int paddingRight, int paddingTop) { + return createWaterMaskBitmap(src, watermark, + src.getWidth() - watermark.getWidth() - dp2px(context, paddingRight), + dp2px(context, paddingTop)); + } + + /** + * 设置水印图片到左下角 + * + * @param context + * @param src + * @param watermark + * @param paddingLeft + * @param paddingBottom + * @return + */ + public static Bitmap createWaterMaskLeftBottom(Context context, Bitmap src, Bitmap watermark, int paddingLeft, int paddingBottom) { + return createWaterMaskBitmap(src, watermark, dp2px(context, paddingLeft), + src.getHeight() - watermark.getHeight() - dp2px(context, paddingBottom)); + } + + /** + * 设置水印图片到中间 + * + * @param src + * @param watermark + * @return + */ + public static Bitmap createWaterMaskCenter(Bitmap src, Bitmap watermark) { + return createWaterMaskBitmap(src, watermark, + (src.getWidth() - watermark.getWidth()) / 2, + (src.getHeight() - watermark.getHeight()) / 2); + } + + /** + * 给图片添加文字到左上角 + * + * @param context + * @param bitmap + * @param text + * @return + */ + public static Bitmap drawTextToLeftTop(Context context, Bitmap bitmap, String text, int size, int color, int paddingLeft, int paddingTop) { + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(color); + paint.setTextSize(dp2px(context, size)); + Rect bounds = new Rect(); + paint.getTextBounds(text, 0, text.length(), bounds); + return drawTextToBitmap(context, bitmap, text, paint, bounds, + dp2px(context, paddingLeft), + dp2px(context, paddingTop) + bounds.height()); + } + + /** + * 绘制文字到右下角 + * + * @param context + * @param bitmap + * @param text + * @param size + * @param color + * @return + */ + public static Bitmap drawTextToRightBottom(Context context, Bitmap bitmap, String text, int size, int color, int paddingRight, int paddingBottom) { + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(color); + paint.setTextSize(dp2px(context, size)); + Rect bounds = new Rect(); + paint.getTextBounds(text, 0, text.length(), bounds); + return drawTextToBitmap(context, bitmap, text, paint, bounds, + bitmap.getWidth() - bounds.width() - dp2px(context, paddingRight), + bitmap.getHeight() - dp2px(context, paddingBottom)); + } + + /** + * 绘制文字到右上方 + * + * @param context + * @param bitmap + * @param text + * @param size + * @param color + * @param paddingRight + * @param paddingTop + * @return + */ + public static Bitmap drawTextToRightTop(Context context, Bitmap bitmap, String text, int size, int color, int paddingRight, int paddingTop) { + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(color); + paint.setTextSize(dp2px(context, size)); + Rect bounds = new Rect(); + paint.getTextBounds(text, 0, text.length(), bounds); + return drawTextToBitmap(context, bitmap, text, paint, bounds, + bitmap.getWidth() - bounds.width() - dp2px(context, paddingRight), + dp2px(context, paddingTop) + bounds.height()); + } + + /** + * 绘制文字到左下方 + * + * @param context + * @param bitmap + * @param text + * @param size + * @param color + * @param paddingLeft + * @param paddingBottom + * @return + */ + public static Bitmap drawTextToLeftBottom(Context context, Bitmap bitmap, String text, int size, int color, int paddingLeft, int paddingBottom) { + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(color); + paint.setTextSize(dp2px(context, size)); + Rect bounds = new Rect(); + paint.getTextBounds(text, 0, text.length(), bounds); + return drawTextToBitmap(context, bitmap, text, paint, bounds, + dp2px(context, paddingLeft), + bitmap.getHeight() - dp2px(context, paddingBottom)); + } + + /** + * 绘制文字到中间 + * + * @param context + * @param bitmap + * @param text + * @param size + * @param color + * @return + */ + public static Bitmap drawTextToCenter(Context context, Bitmap bitmap, String text, int size, int color) { + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(color); + paint.setTextSize(dp2px(context, size)); + Rect bounds = new Rect(); + paint.getTextBounds(text, 0, text.length(), bounds); + return drawTextToBitmap(context, bitmap, text, paint, bounds, + (bitmap.getWidth() - bounds.width()) / 2, + (bitmap.getHeight() + bounds.height()) / 2); + } + + //图片上绘制文字 + private static Bitmap drawTextToBitmap(Context context, Bitmap bitmap, String text, Paint paint, Rect bounds, int paddingLeft, int paddingTop) { + android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); + + paint.setDither(true); // 获取跟清晰的图像采样 + paint.setFilterBitmap(true);// 过滤一些 + if (bitmapConfig == null) { + bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888; + } + bitmap = bitmap.copy(bitmapConfig, true); + Canvas canvas = new Canvas(bitmap); + + canvas.drawText(text, paddingLeft, paddingTop, paint); + return bitmap; + } + + /** + * 缩放图片 + * + * @param src + * @param w + * @param h + * @return + */ + public static Bitmap scaleWithWH(Bitmap src, double w, double h) { + if (w == 0 || h == 0 || src == null) { + return src; + } else { + // 记录src的宽高 + int width = src.getWidth(); + int height = src.getHeight(); + // 创建一个matrix容器 + Matrix matrix = new Matrix(); + // 计算缩放比例 + float scaleWidth = (float) (w / width); + float scaleHeight = (float) (h / height); + // 开始缩放 + matrix.postScale(scaleWidth, scaleHeight); + // 创建缩放后的图片 + return Bitmap.createBitmap(src, 0, 0, width, height, matrix, true); + } + } + + /** + * dip转pix + * + * @param context + * @param dp + * @return + */ + public static int dp2px(Context context, float dp) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dp * scale + 0.5f); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java b/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java index 97d675d4..9a7b6d1a 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java @@ -263,6 +263,15 @@ public class ProcessReceiver extends BroadcastReceiver { //创建voiceConent并添加到数据 final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl); + // 把voiceContent拆解成1024的分包 + Util.parseToVoicePacketSent(voiceContent); + //trigger 分包发送 + if (CoreService.getInstance().getConnection()!=null) + CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", ""); + }else if (msgType.equals("pic")){ + //创建voiceConent并添加到数据 + final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl,2,1); + // 把voiceContent拆解成1024的分包 Util.parseToVoicePacketSent(voiceContent); //trigger 分包发送