图片等发送,在做一半。
authorsnickersun <snickersun@qq.com>
Sun, 26 Jul 2020 23:43:11 +0000 (07:43 +0800)
committersnickersun <snickersun@qq.com>
Sun, 26 Jul 2020 23:43:11 +0000 (07:43 +0800)
图片水印功能函数文件加上了,还没有看效果

app/src/main/java/com/enqualcomm/support/Config.java
app/src/main/java/com/enqualcomm/support/bean/Content.java
app/src/main/java/com/enqualcomm/support/bean/VoiceContent.java
app/src/main/java/com/enqualcomm/support/service/AudioService.java
app/src/main/java/com/enqualcomm/support/utils/ImageUtil.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java

index 3d4b576..56a42f7 100644 (file)
@@ -413,7 +413,7 @@ public class Config {
 \r
 \r
     noPPGSensor=(ICJniUtils.isPPGavailable()==0);\r
-    noTempSensor=(ICJniUtils.isTemperatureDevAvailable()==0);\r
+   // noTempSensor=(ICJniUtils.isTemperatureDevAvailable()==0);\r
 \r
   }\r
 \r
index f4b6060..d21f334 100644 (file)
@@ -54,6 +54,9 @@ public abstract class Content {
   public String serverTime;\r
   \r
   public int status;\r
+\r
+  public int filetype;\r
+  public int datatype;\r
   \r
   protected Content(int _category, String _content, String _preview, int _status, int _inOrOut, int _contactCategory, String _contactNumber, String _serverTime, long _localtime) {\r
     this.category = _category;\r
@@ -65,8 +68,24 @@ public abstract class Content {
     this.contactNumber = _contactNumber;\r
     this.serverTime = _serverTime;\r
     this.localTime = _localtime;\r
+    this.filetype=1;\r
+    this.datatype=1;\r
+  }\r
+  protected Content(int _category, String _content, String _preview, int _status, int _inOrOut,\r
+                    int _contactCategory, String _contactNumber, String _serverTime, long _localtime,\r
+                    int _filetype, int _datatype) {\r
+    this.category = _category;\r
+    this.content = _content;\r
+    this.preview = _preview;\r
+    this.status = _status;\r
+    this.inOrOut = _inOrOut;\r
+    this.contactCategory = _contactCategory;\r
+    this.contactNumber = _contactNumber;\r
+    this.serverTime = _serverTime;\r
+    this.localTime = _localtime;\r
+    this.filetype=_filetype;\r
+    this.datatype=_datatype;\r
   }\r
-  \r
   public String toString() {\r
     StringBuilder stringBuilder = new StringBuilder();\r
     stringBuilder.append("Content{category=");\r
index 7bad944..893931d 100644 (file)
@@ -11,7 +11,12 @@ public class VoiceContent extends Content {
     super(1, _content, _preview, _status, _inOrOut, _contactCategory, _contactNumber, _serverTime, _localtime);\r
 \r
   }\r
-  \r
+  private VoiceContent(String _content, String _preview, int _status, int _inOrOut, int _contactCategory, String _contactNumber, String _serverTime, long _localtime,int _filetype, int _datatype)\r
+  {\r
+    super(1, _content, _preview, _status, _inOrOut, _contactCategory, _contactNumber, _serverTime, _localtime,_filetype,_datatype);\r
+\r
+  }\r
+\r
   public static VoiceContent from(VoiceContent _voiceContent, byte[] amrData, File amrFilepath,String servertime) {\r
 \r
     StringBuilder stringBuilder2 = new StringBuilder();\r
@@ -25,7 +30,23 @@ public class VoiceContent extends Content {
     _voiceContent.serverTime = servertime;\r
     return _voiceContent;\r
   }\r
-  \r
+\r
+\r
+  public static VoiceContent from(VoiceContent _voiceContent, byte[] amrData, File amrFilepath,String servertime,int filetype,int datatype) {\r
+\r
+    StringBuilder stringBuilder2 = new StringBuilder();\r
+//    stringBuilder2.append(str3);\r
+    stringBuilder2.append(".amr");\r
+    String str1 = Util.saveFile(amrData, 0, amrData.length, amrFilepath, stringBuilder2.toString());\r
+    int duration = Util.getDuration(str1);\r
+    _voiceContent.content = str1;\r
+    _voiceContent.preview = String.valueOf(duration);\r
+    _voiceContent.status = 2;\r
+    _voiceContent.serverTime = servertime;\r
+    _voiceContent.filetype=filetype;\r
+    _voiceContent.datatype=datatype;\r
+    return _voiceContent;\r
+  }\r
   public static VoiceContent placeHolderIn(int _contactCategory, String _contactNumber, String _content) {\r
     return new VoiceContent(_content, null, 1, 1, _contactCategory, _contactNumber, null, System.currentTimeMillis());\r
   }\r
@@ -33,5 +54,10 @@ public class VoiceContent extends Content {
   public static VoiceContent placeHolderOut(int _contactCategory, String _contactNumber, String _content) {\r
     return new VoiceContent(_content, null, 1, 2, _contactCategory, _contactNumber, null, System.currentTimeMillis());\r
   }\r
+\r
+\r
+  public static VoiceContent placeHolderOut(int _contactCategory, String _contactNumber, String _content,int filetype,int datatype) {\r
+    return new VoiceContent(_content, null, 1, 2, _contactCategory, _contactNumber, null, System.currentTimeMillis(),filetype,datatype);\r
+  }\r
 }\r
 \r
index 0d372ff..942f9f3 100644 (file)
@@ -3,14 +3,18 @@ package com.enqualcomm.support.service;
 import android.content.res.AssetFileDescriptor;\r
 import android.content.res.AssetManager;\r
 import android.media.MediaPlayer;\r
+import android.media.MediaRecorder;\r
 \r
 import com.enqualcomm.support.utils.ICLogger;\r
 \r
+import java.io.IOException;\r
+\r
 \r
 public class AudioService implements MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {\r
   private MediaPlayer mMediaPlayer;\r
 \r
   private static AudioService mAudioService=null;\r
+  private static MediaRecorder mRecorder=null;\r
   public AudioService() { initMediaPlayer(); }\r
 \r
   public static AudioService getInstance(){\r
@@ -105,5 +109,29 @@ public class AudioService implements MediaPlayer.OnErrorListener, MediaPlayer.On
     if (this.mMediaPlayer != null && this.mMediaPlayer.isPlaying())\r
       this.mMediaPlayer.stop(); \r
   }\r
+\r
+\r
+\r
+  public void startRecord(String FileName) {\r
+    if (mRecorder==null)\r
+      mRecorder = new MediaRecorder();\r
+    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);\r
+    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);\r
+    mRecorder.setOutputFile(FileName);\r
+    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);\r
+    try {\r
+      mRecorder.prepare();\r
+    } catch (IOException e) {\r
+      ICLogger.e( "prepare() failed");\r
+    }\r
+    mRecorder.start();\r
+  }\r
+\r
+  public void stopRecord( ) {\r
+    if (mRecorder!=null ) {\r
+      mRecorder.stop();\r
+      mRecorder.release();\r
+    }\r
+  }\r
 }\r
 \r
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 (file)
index 0000000..da1d607
--- /dev/null
@@ -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
index 97d675d..9a7b6d1 100644 (file)
@@ -263,6 +263,15 @@ public class ProcessReceiver extends BroadcastReceiver {
         //创建voiceConent并添加到数据\r
         final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl);\r
 \r
+        // 把voiceContent拆解成1024的分包\r
+        Util.parseToVoicePacketSent(voiceContent);\r
+        //trigger 分包发送\r
+        if (CoreService.getInstance().getConnection()!=null)\r
+          CoreService.getInstance().getConnection().DeliverCMDMessageToSystem("SentVoicePacket", "");\r
+      }else if (msgType.equals("pic")){\r
+        //创建voiceConent并添加到数据\r
+        final VoiceContent voiceContent = VoiceContent.placeHolderOut(CONTACT_CATEGORY_GROUP, msgFrom, msgUrl,2,1);\r
+\r
         // 把voiceContent拆解成1024的分包\r
         Util.parseToVoicePacketSent(voiceContent);\r
         //trigger 分包发送\r