Android-Studio 用ShareSDK集成社会化分享,短信验证码,视频录制功能

android sdk-extras android sdk升级到r20版本后,新建android工程时容易提示未安装Support library,若在线更新安装无法解决的话,可以直接下载本资源,然后解压到android sdk的根目录即可。 立即下载

ShareSDK主要用于qq、qq空间、微信、微信朋友圈的分享功能以及第三方登录功能

SMSSDK主要用于短信验证码

集成工作:将sharesdk与smssdk同时集成到android-studio项目中:
注册账号获取key与secret(有两对奥,一个是sharesdk一个是SMSSdk,这里只贴了一个图)
pic01
如果项目的主模块同时依赖ShareSDKLibs与SMSSDKLibs,那么肯定回报jar包重复的错误。这里我们可以让我们项目的主模块去依赖SMSSDKLibs,让模块SMSSDKLibs去依赖ShareSDKLibs,并删除里面重复导入的jar包,至于是哪个我也不记得,我上个图大家对比一下。
SMSSDKLibs的jar

ShareSDKLibs的jar

配置工作
这里主要是一些初始化工作,官方文档里写的很清楚,这里主要说一下一些当初困扰我的地方

首先是短信验证码:

初始化与注册监听

SMSSDK.initSDK(getApplicationContext(), Contacts.GELINGPHONE_APPKEY, Contacts.GELINGPHONE_APPSECRET);
SMSSDK.registerEventHandler(new MySMSCALLBACKHANDLER());

监听的类:

    private class MySMSCALLBACKHANDLER extends EventHandler {

        @Override
        public void afterEvent(int event, int result, Object data) {
            Message msg = Message.obtain();
            msg.what = MSG_SMSSDK_CALLBACK;
            Log.i("PPPPP", event+" "+result);
            msg.arg1 = event;
            msg.arg2 = result;
            msg.obj = data;
            myHandler.sendMessage(msg);
        }
    }

处理返回信息的handler

private class MyHandler extends Handler {
        WeakReference<Activity> weakReference;


        public MyHandler(Activity activity) {
            weakReference = new WeakReference<Activity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Activity activity = weakReference.get();
            if (activity != null) {
                switch (msg.what) {
                    case 2:
                        Toast.makeText(UserRegisterActivity.this, 
                        "手机号不能为空", Toast.LENGTH_SHORT).show();
                        btn_getVerificationCode.setEnabled(true);
                        break;
                    case 3:
                        Toast.makeText(UserRegisterActivity.this, 
                        "手机号错误", Toast.LENGTH_SHORT).show();
                        btn_getVerificationCode.setEnabled(true);
                        break;
                    case MSG_SMSSDK_CALLBACK:
                        if (msg.arg2 == SMSSDK.RESULT_ERROR) {
                            if (msg.arg1 == 3 && msg.arg2 == 0) {                         
                            Toast.makeText(UserRegisterActivity.this, 
                            "验证码错误", Toast.LENGTH_SHORT).show();
                                // flag = false;
                         btn_getVerificationCode.setEnabled(true);
                         btn_getVerificationCode.setText("获取验证码");
                         repeatCodeTime=VerificationCodeTime;//复位  
                         }
                            if (msg.arg1 == 2 && msg.arg2 == 0) {             
                            Toast.makeText(UserRegisterActivity.this, 
                            "验证码发送失败", 
                            Toast.LENGTH_SHORT).show();                              
                            btn_getVerificationCode.setEnabled(true);               
                            btn_getVerificationCode.setText("获取验证码");
                           repeatCodeTime=                                        
                           Contacts.VerificationCodeTime;//复位
                           }
                        } else {
                            switch (msg.arg1) {
                                case   
                                   SMSSDK.EVENT_SUBMIT_
                        VERIFICATION_CODE: {   

                        Toast.makeText                                                                                 
                        (UserRegisterActivity.this, 
                        "验证成功",
                        Toast.LENGTH_SHORT).show();
                                }
                                break;
                                case SMSSDK.EVENT_GET_VERIFICATION_CODE: {
                                    // if (RE_SEND_FLAG) {


                                    Toast.makeText(UserRegisterActivity.this, "验证码已经发送", Toast.LENGTH_SHORT).show();

                                    //flag = true;
                                    // btn_resend.setEnabled(false);
                                    myHandler.sendEmptyMessageDelayed(SEND_OK, 1000);

                                    //  RE_SEND_FLAG = false;
                                    //   }
                                }
                                break;
                            }
                        }

                        break;

                    case SEND_OK:
                        // if (flag) {
                        if (repeatCodeTime >= 0) {
                            btn_getVerificationCode.setText(repeatCodeTime + "秒后重发");
                            // Log.i(TAG, time + "");
                            if (repeatCodeTime == 0) {
                                btn_getVerificationCode.setText("获取验证码");
                                btn_getVerificationCode.setEnabled(true);
                                repeatCodeTime = Contacts.VerificationCodeTime;//复位
                            } else {
                                repeatCodeTime--;
                                btn_getVerificationCode.setEnabled(false);

myHandler.sendEmptyMessageDelayed(SEND_OK, 1000);
                            }
                        }
                        // }

                        break;
                }

            }
        }
    }

主要注意的是发送短信与验证验证码是同一个监听,所在在逻辑上要搞清楚什么是发送成功or失败,什么是验证成功or失败。还有一个问题就是明明已经搭建成功,同一个手机号也没有测试超过10条,但就是显示短信发送失败也就是监听里的值event与result总是2,0。这也许有可能是被智能验证了,只要到官网主页项目里把短信设置里的智能验证关闭就ok了。

社会化分享
QQ与QQ空间分享:

ShareSDK.initSDK(this);

1.创建assets目录将ShareSDk.xml放进去
这里写图片描述
当然要到对应的平台去申请key罗(http://open.qq.com/)

        AppKey = "XXXXXXX"/> 
        <!-- 修改成你在sharesdk后台注册      的应用的appkey"-->
    <QZone
        Id="3"
        SortId="3"
        AppId="XXXXXXXXXXXXXXX"
        AppKey="XXXXXXXXXXXXXXXXXXXX"
        Enable="true" />
    <QQ
        Id="7"
        SortId="7"
        AppId="XXXXXXXXXXXXXXX"
        AppKey="XXXXXXXXXXXXXXXXXXXX"
        ShareByAppClient="true"//有客户端先调用客户端
        Enable="true" />

配置文件除了权限之外还有添加activity

  <activity
            android:name="com.mob.tools.MobUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <intent-filter>
                <data android:scheme="tencent(填腾讯申请的id)" />

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

代码:

   /**
     * qq好友
     */
    private void showQQShare() {
        ShareSDK.initSDK(this);
        ShareParams sp = new ShareParams();
        sp.setTitle(Contacts.SHARESDK_TITLE);
        if (Share_Content != null) {
            sp.setText(Share_Content);
        }
        sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rul
        sp.setTitleUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情
        //3、非常重要:获取平台对象
        Platform qq = ShareSDK.getPlatform(QQ.NAME);
        qq.setPlatformActionListener(TestActivity.this); // 设置分享事件回调
        qq.authorize();
        // 执行分享
        qq.share(sp);

        if (mShareDialog != null) {
            mShareDialog.dismiss();
        }

        Log.i("GGGG", "mShareDialog关闭");
    }
 /**
     * qq空间
     */

    private void showQQShare2() {
        ShareSDK.initSDK(this);
        ShareParams sp = new ShareParams();
        sp.setTitle(Contacts.SHARESDK_TITLE);
        if (Share_Content != null) {
            sp.setText(Share_Content);
        }
        sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rul
        sp.setTitleUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情
        //3、非常重要:获取平台对象
        Platform qq = ShareSDK.getPlatform(QZone.NAME);
        qq.setPlatformActionListener(TestActivity.this); // 设置分享事件回调
        //  qq.authorize();//空间分享不需要这句  否则报错
        // 执行分享
        qq.share(sp);
        if (mShareDialog != null) {
            mShareDialog.dismiss();
        }
        Log.i("GGGG", "mShareDialog关闭");
    }

微信分享

    <Wechat
        Id="4"
        SortId="4"
        AppId="XXXXXXX"
        AppSecret="XXXXX"            //微信开发平台
        BypassApproval="false"
        Enable="true" />

    <WechatMoments
        Id="5"
        SortId="5"
        AppId="XXXXXXX"
        AppSecret="XXXXX"
        BypassApproval="false"
        Enable="true" />

添加WXEntryActivity注意文件夹的名字此activity必须放在wxapi文件下,不能改文件夹的名字。
这里写图片描述

配置文件

       <!-- 微信分享回调 -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

代码

 /**
     * 微信好友分享
     */

    private void showWeiXinShare2() {
        ShareSDK.initSDK(this);
        ShareParams sp = new ShareParams();
        sp.setShareType(Platform.SHARE_WEBPAGE); //非常重要:一定要设置分享属性
        sp.setTitle(Contacts.SHARESDK_TITLE);
        if (Share_Content != null) {
            sp.setText(Share_Content);
        }
        sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rul
        sp.setUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情

        //3、非常重要:获取平台对象
        Platform wechatMoments = ShareSDK.getPlatform(Wechat.NAME);
        wechatMoments.setPlatformActionListener(TestActivity.this); // 设置分享事件回调
        // 执行分享
        wechatMoments.share(sp);
        if (mShareDialog != null) {
            mShareDialog.dismiss();
        }


    }
  /**
     * 微信朋友圈分享
     */

    private void showWeiXinShare() {
        ShareSDK.initSDK(this);
        ShareParams sp = new ShareParams();
        sp.setShareType(Platform.SHARE_WEBPAGE); //非常重要:一定要设置分享属性
        // sp.setTitle("我是分享标题");  //分享标题  此属性微信用不了
        sp.setTitle(Contacts.SHARESDK_TITLE);


 /*       if (Share_Content != null) {
            sp.setText(Share_Content);
        }*/
        sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rul
        sp.setUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情

        //3、非常重要:获取平台对象
        Platform wechatMoments = ShareSDK.getPlatform(WechatMoments.NAME);
        wechatMoments.setPlatformActionListener(TestActivity.this); // 设置分享事件回调
        // 执行分享
        wechatMoments.share(sp);
        if (mShareDialog != null) {
            mShareDialog.dismiss();
        }

    }

分享的三个回调监听

 @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {

        //分享成功
        mHandler.sendEmptyMessage(2);


    }

    @Override
    public void onError(Platform platform, int i, Throwable throwable) {
          //分享失败
        throwable.printStackTrace();
        Message msg = new Message();
        msg.what = 6;
        msg.obj = throwable.getMessage();
        mHandler.sendMessage(msg);


    }

    @Override
    public void onCancel(Platform platform, int i) {
           //取消分享
        mHandler.sendEmptyMessage(5);

    }

分享主要是微信分享那块注意一下,WXEntryActivity必须放在wxapi文件夹下,不然没用,还有就是去各大平台去申请账号了。

第三方登录:

 //qq第三方登录

                dialogBuilder=FileUtils.showDialog(UserLoginActivity.this);
                Platform qq = ShareSDK.getPlatform(QQ.NAME);
                qq.SSOSetting(false);  //设置false表示使用SSO授权方式
                qq.setPlatformActionListener(this); // 设置分享事件回调
                if (qq.isValid()) {
                    qq.removeAccount(true);
                }
                if (qq.isClientValid()) {

                    Log.i("QQ快速登录", "安装了QQ");

                } else {
                    Log.i("QQ快速登录", "没有安装了QQ");
                    //   Toast.makeText(UserLoginActivity.this, "检测到您的手机没有安装QQ", Toast.LENGTH_SHORT).show();
                    FileUtils.showToast(UserLoginActivity.this, mToast, "检测到您的手机没有安装QQ");

                    return;
                }
                qq.showUser(null);//获取到用户信息
 //微信登录
                dialogBuilder=FileUtils.showDialog(UserLoginActivity.this);

                Log.i("KKK::::KKK","iv_weixin");
                Platform weixinfd = ShareSDK.getPlatform(Wechat.NAME);
                weixinfd.SSOSetting(false);
                weixinfd.setPlatformActionListener(this);

                if (weixinfd.isAuthValid ()){
                    weixinfd.removeAccount(true);
                }
                if (weixinfd.isClientValid()){
                    Log.i("微信快速登录", "安装了微信");
                }else{
                    Log.i("微信快速登录", "没有安装了微信");
                    //Toast.makeText(UserLoginActivity.this, "检测到您的手机没有安装QQ", Toast.LENGTH_SHORT).show();
                    FileUtils.showToast(UserLoginActivity.this, mToast, "检测到您的手机没有安装微信");


                    if (dialogBuilder!=null){
                        dialogBuilder.dismiss();
                    }
                    return;
                }

                weixinfd.showUser(null);

也有三个监听

 @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
        //登陆成功
        Log.i("KKK::::KKK","获取用户名字:"+ platform.getDb().getUserName());
        Log.i("KKK::::KKK","获取用户头像:"+ platform.getDb().getUserIcon());


        Message msg = new Message();
        msg.what = 1;
        msg.arg1 = 1;
        msg.arg2 = i;
        msg.obj = platform;
        UIHandler.sendMessage(msg, this);

        Toast.makeText(UserLoginActivity.this,"onComplete",Toast.LENGTH_SHORT).show();







    }

    @Override
    public void onError(Platform platform, int i, Throwable throwable) {

        /**
         * 登录失败
         */
        Log.i("KKK::::KKK","onError");
        throwable.printStackTrace();

        Toast.makeText(UserLoginActivity.this,"onError",Toast.LENGTH_SHORT).show();
        /**
         * 判断第三方登录失败
         */

        Message msg = new Message();
        msg.what = 1;
        msg.arg1 = 2;
        msg.arg2 = 1;
        msg.obj = throwable;
        UIHandler.sendMessage(msg, this);
        // 分享失败的统计
        ShareSDK.logDemoEvent(4, platform);
    }

    @Override
    public void onCancel(Platform platform, int i) {

        /**
         * 取消登录
         */
        Log.i("KKK::::KKK","onCancel");
        Toast.makeText(UserLoginActivity.this,"onCancel",Toast.LENGTH_SHORT).show();
        Message msg = new Message();
        msg.what = 1;
        msg.arg1 = 3;
        msg.arg2 = 1;
        msg.obj = platform;
        UIHandler.sendMessage(msg, this);

    }

第三方登录的细节:像英雄联盟手机助手一样qq快速登录的时候会有英雄联盟的图片,而这里只是单纯的显示APP,没有图片,我问过怎么弄,他们说只要在腾讯开发平台上发布apk,提交app的图片,就会有了。

这里只是大概介绍了share的分享,第三方登录以及短信验证码。具体操作还是以官方文档为准。

关于视频录制:ShareRec

配置:libs 下放jar包,jnilib放so文件
这里写图片描述

我遇到的问题:视频黑屏有声音,我建议这么排查(前提是sdk搭的没问题)
1.需要录制的view(一般应该是个viewgroup吧)是否设置背景,有时候没设置背景style导致黑屏
2.设置刷新屏幕的频率,本人遇到过,比如录制的画面是一个viewpager里加载的fragment就是黑屏,问了客服问了一下午,自己看文档设置频率搞定

 private void initVideoRecord(Context context) {
        recorder = new ViewRecorder(activity_start_class, "XXXXXXXX", "XXXXXXXXX");
        // 设置视频的最大尺寸
        recorder.setMaxFrameSize(Recorder.LevelMaxFrameSize.LEVEL_1280_720);
        // 设置视频的质量(高、中、低)
        recorder.setVideoQuality(Recorder.LevelVideoQuality.LEVEL_HIGH);
        // 设置视频的最短时长
        recorder.setMinDuration(10 * 1000);
        // 设置视频的输出路径
        recorder.setCacheFolder(ProjectUtils.getDiskCacheDir2(context, "video"));
        // 设置是否强制使用软件编码器对视频进行编码(兼容性更高)
        recorder.setForceSoftwareEncoding(true, true);
        recorder.startAuotRefreshRate(1);
    }

频率不能设置太大,倒置您的操作

提醒:sharerec没有截图功能,且对popwindow,dialog之类不会录制

Android12版本-telephony-common源码jar 自己编译的 Android12版本-telephony-common源码jar 包含 classes.jar 和 libs 来源:AOSP源分支 android-12.1.0_r11 立即下载

相关推荐

android studio 实现短信验证 登录

登录 http://www.mob.com/ 注册 创建项目 # 接着帖 我的完整代码 MainActivity package wlt.com.zen; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Te

Android系统内置应用编译问题

项目场景: 在Android系统编译成功后,我们需要内置一些APP源码应用到系统中,跟随系统直接编译烧录到板卡中。在日常APP源码开发中发现问题,进行整理:这里只是针对内置源码编译,不针对APK整包引用 问题描述 打包过程中遇到类引用报错 原因分析: 调用系统指令mm 包名 进行编译时, 1、Android Studio中建立的build.gradle文件以及附加文件都不参与编译。所以生成的编译文件BuildConfig中不包含build.gradle定义的变量。 2、引用的jar/aar

weixin_68948960的博客 4682

混合编程实战:C#集成C++ PCL点云处理库,打造跨语言动态链接库

本文详细介绍了C#与C++混合编程实战,重点讲解如何通过动态链接库(DLL)集成C++ PCL点云处理库,实现跨语言协作。内容涵盖环境配置、PCL功能封装、C#调用DLL的完整方案,以及性能优化和错误处理等进阶技巧,帮助开发者高效处理大规模点云数据,提升工业软件开发效率。

weixin_42620913的博客 381

exported-sdk-libs怎么可以编译生成?

通常是在Android或类似系统的编译过程中遇到的一个中间产物或错误提示,它并不直接表示一个可以编译生成的目标。这个提示往往与编译过程中的依赖库或SDK配置有关。要解决这个问题或了解如何“编译生成”与。

2401_84909321的博客 509

五分钟搞懂游戏开发中的抗锯齿算法

常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...

绿洲守望者 1万+

【向量数据库】Milvus向量数据库 ① 从入门到实战

Milvus是专为海量高维向量设计的开源数据库,支持AI搜索、图像识别、推荐系统等场景。相比传统关系型数据库(如PostgreSQL),它更高效处理语义检索、非结构化数据存储,可毫秒级响应亿级向量查询。单机场景下,推荐配置8GB内存/32GB硬盘,支持FAISS/HNSW等索引算法,支持GPU加速。本文涵盖优快云专属部署教程(CentOS脚本/配置调优),提供避坑指南与扩展资源,并对比分析与传统数据库差异。适合算法工程师、AI开发人员快速上手,附官方下载与性能测试技巧,手把手教你搭建高效向量检索系统!

xiezhiyi007的专栏 1585

java静态库exported-sdk-libs文件没有生成

文件通常不是直接由开发者直接操作或关注的文件,它是Android构建系统(如Gradle和Android Studio的底层构建工具)在构建过程中自动生成的一个中间产物。这个文件或目录通常包含了项目依赖的SDK库的一些处理后的信息,这些信息对于构建系统来说是必要的,但对于开发者来说,通常不需要直接访问或修改。因此,你不应该在源代码管理中包含这个文件或目录。的信息(尽管这通常不是必要的),你可能需要更深入地了解Android的构建系统,或者考虑是否有其他方式来实现你的需求。在Android开发中,

417

Ubuntu无桥接模式或连不上网(详细解决方法

目录 问题1:Ubuntu没有未桥接的主机网络适配器 解决方法 1.打开VMware安装目录下的文件 ​编辑2.右键安装以上三个文件 3.打开网络状态属性,找到VMware bridgeProtocol,点击安装 问题2.Ubuntu桥接模式连不上网 1.win+r打开cmd终端,输入ipconfig /all 2.记录以下数据 3.打开VMware网络设置 问题1:Ubuntu没有未桥接的主机网络适配器 VMWare安装之后,虚拟网络一直使用默认配置 VMnet0为...

m0_65592409的博客 6062

android视频分享功能吗,Unity 调用 Android 分享功能(基于ShareRec SDK视频分享)

需求Mob 平台是一个强大的提供分享功能的平台,为移动开发者提供 ShareSDK 社交分享、ShareREC 手游录像分享、短信验证码 SDK 及 BigApp 等免费服务。Unity 使用 ShareREC 来作视频录制分享以及可以满足大部分需求,但是自带的 UI 实在是有点简陋。虽然可以进行 UI 自定义,但是对于没有 UI 的同学来说,使用 Android 或 IOS 自带的分享功能来做即...

weixin_39678163的博客 480

利用GAT(图论分析工具箱)构建并分析大脑结构协变网络学习笔记

前言 前面我学习了利用DTI构建白质纤维脑网络,并采用GRETNA计算了小世界网络属性。阅读文献发现可以利用灰质体积或皮层指标(皮层厚度、折叠指数、沟深)等构建结构协变网络再进行网络拓扑属性的计算。因此,我采用前面提取的灰质体积和皮质数据进行了结构协变网络分析,特此写下笔记以便后面的学习。 一、数据准备 二、构建结构协变网络 三、全局属性的统计分析 四、局部属性的统计分析 五、网络攻击分析 六、度的分布 ..................

weixin_52073820的博客 7496

预测股票价格趋势:使用MATLAB进行股票价格预测

通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。

2301_79326588的博客 1018

android studio图形验证码,如何用android studio实现生成验证码

满意答案rosymoon9192017.04.01采纳率:55%等级:12已帮助:5099人protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_phoneCode = (EditText...

weixin_32691939的博客 803

提示工程ROI计算模板:架构师私藏Excel表(含自动计算)

花3个人力优化提示词,到底能带来多少实际收益?“这个提示工程项目值得做吗?投入10万成本,多久能回本?“不同LLM应用的提示词优化优先级怎么排?全凭经验拍脑袋?当前90%的企业在提示工程投入上缺乏标准化的量化评估方法,导致资源浪费(盲目投入无回报项目)或错失机会(低估高价值优化点)。ROI = (总收益 - 总成本) / 总成本 × 100%对于提示工程,总成本=显性成本+隐性成本,总收益=直接收益+间接收益(后文会详细拆解)。提示工程的价值不是“玄学”,而是可以用数据量化的投资行为。本文分享的。

AI开发架构师 1073

[android]*_intermediates 生成异常

记录一次从MTK移植应用源码到RK平台后,编译是出现 *_intermediates 生成异常的问题。

Case5的博客 1220

YOLOv8改进:卷积篇 | 保姆级探索动态蛇形卷积 (Dynamic Snake Convolution) 的实现与应用

动态蛇形卷积是一种新的卷积操作,它能够更好地捕捉图像中的细节信息。传统卷积核的形状和大小是固定的,而动态蛇形卷积则允许卷积核在不同的位置动态调整其形状,以更好地适应输入数据的特点。这种灵活性使得动态蛇形卷积在处理复杂背景和细节丰富的图像时具有显著优势。我们先定义一个基本的动态蛇形卷积模块。这个模块将作为YOLOv8卷积层的替代。为了全面集成动态蛇形卷积,我们需要修改YOLOv8的模型定义,将所有的基础卷积层替换为我们的SnakeConv模块。

一键难忘的博客 5481

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android Studio实现短信验证码注册/登录功能(sqlite数据库)

实现效果: 效果图1: 在手机号栏,输入手机号后点击获取验证码,等待片刻就会收到验证码,填写收到的验证码后点击验证注册,就可以实现注册功能。 效果图2: 按照提示,输入手机号和验证码就可以实现登录功能。 实现过程: 注册MobTech 在功能实现之前需要注册MobTech,用来接收和验证验证码,新用户注册有1000条免费额度。 注册MobTech 注册完成之后,在导航栏找到开发者服务下的SMSSDK。点击进入后开始使用。首先需要创建应用,应用LOGO以及应用名称随意填写。填写完后,选

mikusure的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android Studio实现短信验证码注册/登录功能(LitePal)

litepal,登录注册,短信注册

qq_44674094的博客 4555

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ios sharesdk分享 本地视频

` NSArray* imageArray = @[[UIImage imageNamed:@"icon.png"]]; if (imageArray) { NSMutableDictionary *shareParams = [NSMutableDictionary dictionary]; [shareParams SSDKSetupShareParamsB

有酒有故事 704

Android编译interface缺少java_intermediates/exported-sdk-libs文件怎么解决?

当你在Android项目编译过程中遇到缺少文件的问题时,这通常与Android的构建系统(如Gradle)的某些配置或缓存问题有关。

730

iOS - ShareSDK第三方分享(图文和视频)和登录

由于近期工作需要自己抽时间搞了一下第三方分享,这里使用的是shareSDK的第三方,在使用的过程中有一些心得和体会,特在此和大家分享一下~ 1.在经过将近一周时间的开发,终于搞定ios分享了。 2.由于原来使用的是友盟的分享,因此我从对比的使用角度来分析。 a.安全角度,与sharesdk相比,友盟的分享我听说有盗取用户资料的行为,仅仅是听说,但是为了将来用户的安全,我选择s...

weixin_30379911的博客 1173

关于ShareSDK第三方分享 —— 记录

从上班开始就一直忙着加班,项目上线,稍微清闲,整理一下之前三个来月的项目中使用的第三方分享 首先根据mob官方文档做好基本配置,包名签名要记得一致 导入官方的onekeyshare ShareView是我们的自定义布局  一个GridLayout +一个view取消按钮 public class ShareView extends LinearLay

cc_0589的博客 2859

20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libtinfo.so.5的问题

20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libtinfo.so.5的问题。缘起:中科创达的高通CM6125开发板的Android10的编译环境需要。解决方法:sudo apt-get install libtinfo5。wx最初的梦想 于 2022-07-19 16:37:06 发布。安装llvm时出现 clang --version。pyton2【内置python3.8】

南岭笑笑生之家 1101

Android studio密码登录验证码登录(一)界面切换

【代码】Android studio密码登录验证码登录界面切换。

weixin_63128816的博客 1630

Android12(SDK31)中exported的变化

SDK31报错,SDK30正常运行,错误如下: Installation did not succeed. The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED Installation failed due to: 'null'

Motejia的博客 1174

Unity接入MobSDK系列之ShareSDK/SMSSDK/MobPush

SDK接入是Unity开发中必不可少的一项技能,Mob官网集成了多种SDK的功能。本课程详细讲解了SDK接入的基本流程,并针对ShareSDK的第三方登录和分享功能、SMSSDK的短信验证功能、MobPush的推送服务功能的接入流程逐一进行了讲解。通过本系列课程的学习,你不仅可以学到接入这些SDK的流程步骤,更应该学会如何参考官方文档接入一个完全陌生的SDK功能,这才是本课程希望达到的目的。

Android 使用Socket(TCP协议)实现监控(类似于及时通讯)服务器端使用Walkman

最近的项目要实现一台平板控制其余平板的功能(类即时通讯),主要用tcp或者udp进行开发,因为要保证一台机的命令要“发到”其余的机器上,我采取的是数据接收安全的TCP。思路如下图: 1.客户端负责发送与“接收”(其实不是服务端向客户端发送数据而是客户端自己在服务器读取),当然前提服务器提供URL与端口(PORT)。 2.难点:1,客户端与服务器断了能够重连(即当客户端断网了或者服务器崩

SpringYang 6713
上一篇: Android支付宝模块的ali64错误解决
下一篇: 讯飞语音测评SDK的搭建与运用(Android studio)
泡温泉的咸鱼
博客等级 码龄11年 39粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值