尝试使用意图在电子邮件中发送文本和图像。

9 浏览
0 Comments

尝试使用意图在电子邮件中发送文本和图像。

文本工作正常,但图像不工作,我的意思是当我打开电子邮件时,.putExtra(Intent.EXTRA_TEXT ...中的所有内容都存在并且正常工作。 它显示无法附加文件。 文件大小为0字节。\npublic class DigitalSignature extends AppCompatActivity {\nString pilot, ship, to, from, zone1, zone2, CallSign, agent, date;\nToolbar toolbar;\nButton btn_get_sign, mClear, mGetSign, mCancel, btn_send;\ndouble vesselUnit;\nFile file;\nDialog dialog;\nLinearLayout mContent;\nView view;\nsignature mSignature;\nBitmap bitmap;\n// 为保存生成的图像创建单独的目录\nString DIRECTORY = Environment.getExternalStorageDirectory().getPath() + \"/DigitSign/\";\nString pic_name = new SimpleDateFormat(\"yyyyMMdd_HHmmss\", Locale.getDefault()).format(new Date());\nString StoredPath = DIRECTORY + pic_name + \".png\";\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_digital_signature);\n Bundle extras = getIntent().getExtras();\n if (extras != null) {\n pilot = extras.getString(\"Pilot\");\n ship = extras.getString(\"ship\");\n to = extras.getString(\"to\");\n from = extras.getString(\"from\");\n zone1 = extras.getString(\"zone1\");\n zone2 = extras.getString(\"zone2\");\n CallSign = extras.getString(\"callsign\");\n agent = extras.getString(\"agent\");\n vesselUnit = extras.getDouble(\"vesselunits\");\n date = extras.getString(\"date\");\n }\n // 将ToolBar设置为ActionBar\n toolbar = (Toolbar) findViewById(R.id.toolbar);\n setSupportActionBar(toolbar);\n // 打开签名面板的按钮\n btn_get_sign = (Button) findViewById(R.id.signature);\n btn_send= (Button) findViewById(R.id.btn_send);\n // 如果目录不存在,则创建目录\n file = new File(DIRECTORY);\n boolean isDirectoryCreated = file.exists();\n if (!isDirectoryCreated) {\n isDirectoryCreated = file.mkdir();\n }\n // 对话框功能\n dialog = new Dialog(this);\n // 删除常规对话框的功能\n dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);\n dialog.setContentView(R.layout.dialog_sig);\n dialog.setCancelable(true);\n btn_get_sign.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n // 数字签名的功能调用\n dialog_action();\n }\n });\n btn_send.setOnClickListener(new OnClickListener() {\n public void onClick(View v){\n Uri path = Uri.parse(\"file://\" + file);\n Intent emailIntent = new Intent(Intent.ACTION_SEND);\n emailIntent.putExtra(Intent.EXTRA_TEXT, pilot+\"\\n\"+ship+\"\\n\"+to+\"\\n\"+from+\"\\n\"+zone1+\"\\n\"+zone2+\"\\n\"+CallSign+\"\\n\"+agent+\"\\n\"+vesselUnit);\n // 设置类型为“email”\n emailIntent.setType(\"image/png\");\n String to[] = {\"hidingMyEMail\"};\n emailIntent.putExtra(Intent.EXTRA_EMAIL, to);\n // 附件\n emailIntent.putExtra(Intent.EXTRA_STREAM, path);\n // 邮件主题\n emailIntent.putExtra(Intent.EXTRA_SUBJECT, pilot+\"\'s Ticket for \"+ship);\n startActivity(Intent.createChooser(emailIntent , \"Send email...\"));\n }\n });\n}\n// 数字签名的功能\npublic void dialog_action() {\n mContent = (LinearLayout) dialog.findViewById(R.id.linearLayout);\n mSignature = new signature(getApplicationContext(), null);\n mSignature.setBackgroundColor(Color.WHITE);\n // 通过Java代码动态生成布局\n mContent.addView(mSignature, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);\n mClear = (Button) dialog.findViewById(R.id.clear);\n mGetSign = (Button) dialog.findViewById(R.id.getsign);\n mGetSign.setEnabled(false);\n mCancel = (Button) dialog.findViewById(R.id.cancel);\n view = mContent;\n mClear.setOnClickListener(new View.OnClickListener() {\n public void onClick(View v) {\n Log.v(\"tag\", \"Panel Cleared\");\n mSignature.clear();\n mGetSign.setEnabled(false);\n }\n });\n mGetSign.setOnClickListener(new View.OnClickListener() {\n public void onClick(View v) {\n Log.v(\"tag\", \"Panel Saved\");\n view.setDrawingCacheEnabled(true);\n mSignature.save(view, StoredPath);\n dialog.dismiss();\n Toast.makeText(getApplicationContext(), \"Successfully Saved\", Toast.LENGTH_SHORT).show();\n // 调用同一类\n recreate();\n }\n });\n mCancel.setOnClickListener(new View.OnClickListener() {\n public void onClick(View v) {\n Log.v(\"tag\", \"Panel Cancelled\");\n dialog.dismiss();\n // 调用同一类\n recreate();\n }\n });\n dialog.show();\n}\npublic class signature extends View {\n private static final float STROKE_WIDTH = 5f;\n private static final float HALF_STROKE_WIDTH = STROKE_WIDTH / 2;\n private Paint paint = new Paint();\n private Path path = new Path();\n private float lastTouchX;\n private float lastTouchY;\n private final RectF dirtyRect = new RectF();\n public signature(Context context, AttributeSet attrs) {\n super(context, attrs);\n paint.setAntiAlias(true);\n paint.setColor(Color.BLACK);\n paint.setStyle(Paint.Style.STROKE);\n paint.setStrokeJoin(Paint.Join.ROUND);\n paint.setStrokeWidth(STROKE_WIDTH);\n }\n public void save(View v, String StoredPath) {\n Log.v(\"tag\", \"Width: \" + v.getWidth());\n Log.v(\"tag\", \"Height: \" + v.getHeight());\n if (bitmap == null) {\n bitmap = Bitmap.createBitmap(mContent.getWidth(), mContent.getHeight(), Bitmap.Config.RGB_565);\n }\n Canvas canvas = new Canvas(bitmap);\n try {\n // 输出文件\n FileOutputStream mFileOutStream = new FileOutputStream(StoredPath);\n v.draw(canvas);\n // 将输出文件转换为图像,如.png\n bitmap.compress(Bitmap.CompressFormat.PNG, 90, mFileOutStream);\n mFileOutStream.flush();\n mFileOutStream.close();\n } catch (Exception e) {\n Log.v(\"log_tag\", e.toString());\n }\n }\n public void clear() {\n path.reset();\n invalidate();\n }\n @Override\n protected void onDraw(Canvas canvas) {\n canvas.drawPath(path, paint);\n }\n @Override\n public boolean onTouchEvent(MotionEvent event) {\n float eventX = event.getX();\n float eventY = event.getY();\n mGetSign.setEnabled(true);\n switch (event.getAction()) {\n case MotionEvent.ACTION_DOWN:\n path.moveTo(eventX, eventY);\n lastTouchX = eventX;\n lastTouchY = eventY;\n return true;\n case MotionEvent.ACTION_MOVE:\n case MotionEvent.ACTION_UP:\n resetDirtyRect(eventX, eventY);\n int historySize = event.getHistorySize();\n for (int i = 0; i < historySize; i++) {\n float historicalX = event.getHistoricalX(i);\n float historicalY = event.getHistoricalY(i);\n expandDirtyRect(historicalX, historicalY);\n path.lineTo(historicalX, historicalY);\n }\n path.lineTo(eventX, eventY);\n break;\n default:\n debug(\"Ignored touch event: \" + event.toString());\n return false;\n }\n invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH),\n (int) (dirtyRect.top - HALF_STROKE_WIDTH),\n (int) (dirtyRect.right + HALF_STROKE_WIDTH),\n (int) (dirtyRect.bottom + HALF_STROKE_WIDTH));\n lastTouchX = eventX;\n lastTouchY = eventY;\n return true;\n }\n private void debug(String string) {\n Log.v(\"log_tag\", string);\n }\n private void expandDirtyRect(float historicalX, float historicalY) {\n if (historicalX < dirtyRect.left) {\n dirtyRect.left = historicalX;\n } else if (historicalX > dirtyRect.right) {\n dirtyRect.right = historicalX;\n }\n if (historicalY < dirtyRect.top) {\n dirtyRect.top = historicalY;\n } else if (historicalY > dirtyRect.bottom) {\n dirtyRect.bottom = historicalY;\n }\n }\n private void resetDirtyRect(float eventX, float eventY) {\n dirtyRect.left = Math.min(lastTouchX, eventX);\n dirtyRect.right = Math.max(lastTouchX, eventX);\n dirtyRect.top = Math.min(lastTouchY, eventY);\n dirtyRect.bottom = Math.max(lastTouchY, eventY);\n }\n}\n}

0