电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android實(shí)現(xiàn)app分享文件到微信功能

瀏覽:117日期:2022-06-04 13:20:16

本文實(shí)例為大家分享了Android實(shí)現(xiàn)app分享文件到微信的具體代碼,供大家參考,具體內(nèi)容如下

兩種實(shí)現(xiàn)方案:

1.使用WXFileObject構(gòu)造分享方法發(fā)送到微信;2.調(diào)用系統(tǒng)分享方法,把文件直接發(fā)送到微信;

那么下面來(lái)分別看看怎么實(shí)現(xiàn):

0、準(zhǔn)備工作

首先,需要在AndroidManifest.xml中配置FileProvider信息,以適配10以后版本文件讀取問(wèn)題

AndroidManifest.xml

<provider android:name='androidx.core.content.FileProvider' android:authorities='${applicationId}.fileprovider' android:exported='false' android:grantUriPermissions='true' tools:replace='android:authorities'> <meta-dataandroid:name='android.support.FILE_PROVIDER_PATHS'android:resource='@xml/file_paths'tools:replace='android:resource' /></provider>

file_paths.xml

<paths> <external-pathname='external_files'path='.' /></paths>

一、使用WXFileObject構(gòu)造分享方法發(fā)送到微信

這種方式分享需要接入微信分享的SDK,分享到微信后可以顯示來(lái)源。但是官方文檔中沒(méi)有WXFileObject的示例,所以這里貼一段自己寫(xiě)的方法給大家做參考,其他分享類型可以參考官方文檔

ShareUtils.java

public static final String PACKAGE_WECHAT = 'com.tencent.mm'; /** * 分享文件到微信好友 by WXAPI * * @param thumbId 分享到微信顯示的圖標(biāo) */ public static void shareFileToWechat(Context context, File file, int thumbId) { if (!isInstallApp(context, ShareUtils.PACKAGE_WECHAT)) { Toast.makeText(context, '您需要安裝微信客戶端', Toast.LENGTH_LONG).show(); return;}//構(gòu)建發(fā)送文件體WXFileObject fileObject = new WXFileObject();byte[] fileBytes = readFile(file);//設(shè)置需要發(fā)送的文件byte[]fileObject.setFileData(fileBytes);fileObject.setFilePath(file.getAbsolutePath());//使用媒體消息分享WXMediaMessage msg = new WXMediaMessage(fileObject);//這個(gè)title有講究,最好設(shè)置為帶后綴的文件名,否則可能分享到微信后無(wú)法讀取msg.title = file.getName();//設(shè)置顯示的預(yù)覽圖 需小于32KBif (thumbId <= 0) thumbId = R.mipmap.ic_launcher;msg.thumbData = readBitmap(context, thumbId);//發(fā)送請(qǐng)求SendMessageToWX.Req req = new SendMessageToWX.Req();//創(chuàng)建唯一標(biāo)識(shí)req.transaction = String.valueOf(System.currentTimeMillis());req.message = msg;req.scene = SendMessageToWX.Req.WXSceneSession; //WXSceneSession:分享到對(duì)話// 通過(guò)WXAPIFactory工廠,獲取IWXAPI的實(shí)例IWXAPI api = WXAPIFactory.createWXAPI(context, WXEntryActivity.APP_ID, true);// 將應(yīng)用的appId注冊(cè)到微信api.registerApp(WXEntryActivity.APP_ID);api.sendReq(req); } // 判斷是否安裝指定app public static boolean isInstallApp(Context context, String app_package) {final PackageManager packageManager = context.getPackageManager();List<PackageInfo> pInfo = packageManager.getInstalledPackages(0);if (pInfo != null) { for (int i = 0; i < pInfo.size(); i++) {String pn = pInfo.get(i).packageName;if (app_package.equals(pn)) { return true;} }}return false; } /** * 圖片讀取成byte[] */ private static byte[] readBitmap(Context context, int resourceId) {Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId);ByteArrayOutputStream bos = new ByteArrayOutputStream();try { bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); return bos.toByteArray();} catch (Exception e) { e.printStackTrace();} finally { closeQuietly(bos);}return null; } /** * file文件讀取成byte[] */ private static byte[] readFile(File file) {RandomAccessFile rf = null;byte[] data = null;try { rf = new RandomAccessFile(file, 'r'); data = new byte[(int) rf.length()]; rf.readFully(data);} catch (Exception exception) { exception.printStackTrace();} finally { closeQuietly(rf);}return data; } //關(guān)閉讀取file private static void closeQuietly(Closeable closeable) {try { if (closeable != null) {closeable.close(); }} catch (Exception exception) { exception.printStackTrace(); }}

效果如下:

Android實(shí)現(xiàn)app分享文件到微信功能

二、調(diào)用系統(tǒng)分享方法,把文件直接發(fā)送到微信

此種方式的好處就是不依賴微信SDK,調(diào)用系統(tǒng)提供的分享彈窗來(lái)分享到微信。

/** * 直接文件到微信好友 * * @param picFile 文件路徑 */ public static void shareWechatFriend(Context mContext, File picFile) { //首先判斷是否安裝微信if (isInstallApp(mContext, ShareUtils.PACKAGE_WECHAT)) { Intent intent = new Intent(); intent.setPackage(PACKAGE_WECHAT); intent.setAction(Intent.ACTION_SEND); String type = '*/*'; for (int i = 0; i < MATCH_ARRAY.length; i++) {//判斷文件的格式if (picFile.getAbsolutePath().toString().contains(MATCH_ARRAY[i][0].toString())) { type = MATCH_ARRAY[i][1]; break;} } intent.setType(type); Uri uri = null; if (picFile != null) {//這部分代碼主要功能是判斷了下文件是否存在,在android版本高過(guò)7.0(包括7.0版本)//當(dāng)前APP是不能直接向外部應(yīng)用提供file開(kāi)頭的的文件路徑,//需要通過(guò)FileProvider轉(zhuǎn)換一下。否則在7.0及以上版本手機(jī)將直接crash。try { ApplicationInfo applicationInfo = mContext.getApplicationInfo(); int targetSDK = applicationInfo.targetSdkVersion; if (targetSDK >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {uri = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName() + '.fileprovider', picFile); } else {uri = Uri.fromFile(picFile); } intent.putExtra(Intent.EXTRA_STREAM, uri);} catch (Exception e) { e.printStackTrace();} } intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (getVersionCode(mContext, PACKAGE_WECHAT) > VERSION_CODE_FOR_WEI_XIN_VER7) {// 微信7.0及以上版本intent.setAction(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_STREAM, uri); } mContext.startActivity(Intent.createChooser(intent, '分享文件'));} else { Toast.makeText(mContext, '您需要安裝微信客戶端', Toast.LENGTH_LONG).show();} } // 建立一個(gè)文件類型與文件后綴名的匹配表 private static final String[][] MATCH_ARRAY = { //{后綴名, 文件類型} {'.3gp', 'video/3gpp'}, {'.apk', 'application/vnd.android.package-archive'}, {'.asf', 'video/x-ms-asf'}, {'.avi', 'video/x-msvideo'}, {'.bin', 'application/octet-stream'}, {'.bmp', 'image/bmp'}, {'.c', 'text/plain'}, {'.class', 'application/octet-stream'}, {'.conf', 'text/plain'}, {'.cpp', 'text/plain'}, {'.doc', 'application/msword'}, {'.exe', 'application/octet-stream'}, {'.gif', 'image/gif'}, {'.gtar', 'application/x-gtar'}, {'.gz', 'application/x-gzip'}, {'.h', 'text/plain'}, {'.htm', 'text/html'}, {'.html', 'text/html'}, {'.jar', 'application/java-archive'}, {'.java', 'text/plain'}, {'.jpeg', 'image/jpeg'}, {'.jpg', 'image/jpeg'}, {'.js', 'application/x-javascript'}, {'.log', 'text/plain'}, {'.m3u', 'audio/x-mpegurl'}, {'.m4a', 'audio/mp4a-latm'}, {'.m4b', 'audio/mp4a-latm'}, {'.m4p', 'audio/mp4a-latm'}, {'.m4u', 'video/vnd.mpegurl'}, {'.m4v', 'video/x-m4v'}, {'.mov', 'video/quicktime'}, {'.mp2', 'audio/x-mpeg'}, {'.mp3', 'audio/x-mpeg'}, {'.mp4', 'video/mp4'}, {'.mpc', 'application/vnd.mpohun.certificate'}, {'.mpe', 'video/mpeg'}, {'.mpeg', 'video/mpeg'}, {'.mpg', 'video/mpeg'}, {'.mpg4', 'video/mp4'}, {'.mpga', 'audio/mpeg'}, {'.msg', 'application/vnd.ms-outlook'}, {'.ogg', 'audio/ogg'}, {'.pdf', 'application/pdf'}, {'.png', 'image/png'}, {'.pps', 'application/vnd.ms-powerpoint'}, {'.ppt', 'application/vnd.ms-powerpoint'}, {'.prop', 'text/plain'}, {'.rar', 'application/x-rar-compressed'}, {'.rc', 'text/plain'}, {'.rmvb', 'audio/x-pn-realaudio'}, {'.rtf', 'application/rtf'}, {'.sh', 'text/plain'}, {'.tar', 'application/x-tar'}, {'.tgz', 'application/x-compressed'}, {'.txt', 'text/plain'}, {'.wav', 'audio/x-wav'}, {'.wma', 'audio/x-ms-wma'}, {'.wmv', 'audio/x-ms-wmv'}, {'.wps', 'application/vnd.ms-works'}, {'.xml', 'text/plain'}, {'.z', 'application/x-compress'}, {'.zip', 'application/zip'}, {'', '*/*'} };

效果如下:

Android實(shí)現(xiàn)app分享文件到微信功能

以上,就是app通過(guò)微信分享文件的2種解決方式。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: 微信
相關(guān)文章:
主站蜘蛛池模板: 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 医养体检包_公卫随访箱_慢病随访包_家签随访包_随访一体机-济南易享医疗科技有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 熔体泵|换网器|熔体齿轮泵|熔体计量泵厂家-郑州巴特熔体泵有限公司 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 深圳市人通智能科技有限公司| 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 工业插头-工业插头插座【厂家】-温州罗曼电气 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 哔咔漫画网页版在线_下载入口访问指引 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 东莞海恒试验仪器设备有限公司 | 垃圾清运公司_环卫保洁公司_市政道路保洁公司-华富环境 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 |