当前位置: 首页 > news >正文

苏州建站公司深圳网站建设推广方案

苏州建站公司,深圳网站建设推广方案,做宾馆网站好,简历免费下载模板闲来无事,flutter好久没看了,上次折腾flutter与Android通信没折腾完,有些事情耽搁了,这次继续 演示效果: flutter与Android原生通信 flutter端 import package:flutter/cupertino.dart; import package:flutter/mater…

闲来无事,flutter好久没看了,上次折腾flutter与Android通信没折腾完,有些事情耽搁了,这次继续

演示效果:

flutter与Android原生通信

flutter端

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class LikePages extends StatefulWidget {const LikePages({super.key});@overrideState<LikePages> createState() => _LikePagesState();
}class _LikePagesState extends State<LikePages> {final MethodChannel _channel = MethodChannel('abc');
// Flutter 调用 Android 方法Future<void> callNativeMethod() async {try {final String result = await _channel.invokeMethod('getPlatformVersion');print('Result from Android: $result');} catch (e) {print('Error calling native method: $e');}}Future<void> callNativeOpenCameraMethod() async {try {final String result = await _channel.invokeMethod('openCamera');print('Result from Android: $result');} catch (e) {print('Error calling native method: $e');}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('like'),),body: Column(children: [Center(child: GestureDetector(child: Text('like'),onTap: (){// 调用 Flutter 调用 Android 方法callNativeMethod();},),),Padding(padding: const EdgeInsets.all(80.0),child: Center(child: GestureDetector(child: Text('openCamare'),onTap: (){// 调用 Flutter 调用 Android 方法callNativeOpenCameraMethod();},),),),],),);}
}
Android端
package com.example.f4import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Build.VERSION
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.widget.Toast
import androidx.annotation.NonNull
import androidx.annotation.Nullable
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.util.*class MainActivity: FlutterActivity() {private val CHANNEL = "abc"private val REQUEST_IMAGE_CAPTURE = 1private val PERMISSION_REQUEST_CODE = 200var resultOut:MethodChannel.Result?=nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)XXPermissions.with(this) // 申请单个权限.permission(Permission.CAMERA) // 申请多个权限.permission(Permission.Group.CALENDAR) // 设置权限请求拦截器(局部设置)//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制(局部设置)//.unchecked().request(object : OnPermissionCallback {override fun onGranted(permissions: List<String>, allGranted: Boolean) {if (!allGranted) {
//                        Toast(this@MainActivity,"获取部分权限成功,但部分权限未正常授予",Toast.LENGTH_SHORT).show()return}
//                    toast("获取录音和日历权限成功")}override fun onDenied(permissions: List<String>, doNotAskAgain: Boolean) {if (doNotAskAgain) {
//                        toast("被永久拒绝授权,请手动授予录音和日历权限")// 如果是被永久拒绝就跳转到应用权限系统设置页面XXPermissions.startPermissionActivity(context, permissions)} else {
//                        toast("获取录音和日历权限失败")}}})}override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)// 创建 MethodChannelMethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->// 处理 Flutter 调用 Android 方法if (call.method == "getPlatformVersion") {result.success("Android ${VERSION.RELEASE}")}else if (call.method=="openCamera"){Log.e("TAG","call.method:="+call.method);resultOut = resultdispatchTakePictureIntent()} else {result.notImplemented()}}}// 获取真实路径的函数private fun getRealPathFromUri(uri: Uri): String? {val projection = arrayOf(MediaStore.Images.Media.DATA)val cursor = contentResolver.query(uri, projection, null, null, null)return cursor?.use {val columnIndex = it.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)it.moveToFirst()it.getString(columnIndex)}}fun saveBitmapToFile(context: Context, bitmap: Bitmap): String {val cw = ContextWrapper(context)val directory: File = cw.getDir("images", Context.MODE_PRIVATE)// 为文件生成唯一的名称val imageName = "img_${UUID.randomUUID()}.jpg"// 创建文件对象val file = File(directory, imageName)var fos: FileOutputStream? = nulltry {fos = FileOutputStream(file)bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos) // 将 Bitmap 压缩为 JPEG 格式} catch (e: IOException) {e.printStackTrace()} finally {try {fos?.close()} catch (e: IOException) {e.printStackTrace()}}// 返回文件的路径return file.absolutePath}override fun onActivityResult(requestCode: Int, resultCode: Int,data: Intent) {super.onActivityResult(requestCode, resultCode, data)Log.e("TAG","==-->${data.extras}"+"  resultCode:=$resultCode "+" requestCode:$requestCode ")if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {// 图片从相机返回val extras = data.extrasif (extras != null) {// 获取拍摄的照片val imageBitmap = extras.get("data") as Bitmap?// 保存 Bitmap 到文件并获取文件路径val imagePath = imageBitmap?.let { saveBitmapToFile(applicationContext, it) }// 在这里使用文件路径resultOut?.success(imagePath)}} else {Toast.makeText(this, "Failed to capture image", Toast.LENGTH_SHORT).show()}}private fun dispatchTakePictureIntent() {val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)if (takePictureIntent.resolveActivity(packageManager) != null) {startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)}}
}

上述代码演示了直接获取Android版本号,以及调用Android原生拍照并发挥图片路径到Flutter的方式,至于为什么会想要搞搞这个,原因还是在与Flutter插件的稳定性问题,假如要实现一个功能,但是受限于Flutter插件自身的问题,就只能自己来实现了,这时候通过原生代码返回需要的数据就不失为一种解决方案,

http://www.hkea.cn/news/432684/

相关文章:

  • 深圳网站建设外贸公司价格网络营销的背景和意义
  • 长春网站建设硕成传媒seo快速排名优化公司
  • web网站开发能使用c 吗免费建立个人网站申请
  • 织梦网站修改教程视频网站优化培训学校
  • 南沙区交通和建设局网站中国十大网络销售公司
  • 免费建设网站的方法百度网址大全 官网
  • 手机网站设计制作公司微信推广费用一般多少
  • 建设网站需要什么注册域名费用一般多少钱
  • 女性门户网站源码百度指数功能有哪些
  • 怎么帮公司做网站建设谷歌搜索引擎免费入口 香港
  • 请写出网站建设前期需要做的准备外贸定制网站建设电话
  • 南京门户网站建设网络营销优秀案例
  • 2012服务器如何做网站周口网络推广哪家好
  • 贵阳搜索玩的网站网络舆情软件免费入口
  • 前端自己写代码建网站要花多少钱游戏推广在哪里接活
  • 网站建设中+网页代码nba最新排名东西部
  • 东莞企业建设网站官网有限公司百度推广深圳分公司
  • 海外推广工作内容搜索引擎优化seo是什么
  • wordpress 发短信西安网络优化大的公司
  • dreamweaver个人网站南宁求介绍seo软件
  • 网站常用素材企业培训视频
  • 北京市通州区建设委员会网站网站新站整站排名
  • 太原网站推广只选中联传媒推广排名seo
  • 企业网站建设的常见流程为百度互联网营销顾问
  • 养殖企业网站网络营销策划名词解释
  • 如何进行电子商务网站推广?百度网盘app
  • 做情趣网站需要什么资质sem推广外包
  • 国外网站做任务赚钱的最近新闻有哪些
  • 建设部网站查资质中裕隆百度推广登录平台网址
  • 黄页网站大全免费山东网络推广优化排名