Android 百度翻译API(详细步骤+源码)

您所在的位置:网站首页 机器翻译项目源码怎么用 Android 百度翻译API(详细步骤+源码)

Android 百度翻译API(详细步骤+源码)

2024-07-17 09:36| 来源: 网络整理| 查看: 265

百度翻译API 一、创建平台应用二、创建及配置项目三、编码1. 修改外观与布局2. 初始化控件3. 输入框监听4. 语言选择监听5. 页面点击事件6. 翻译 四、源码地址

一、创建平台应用

运行效果图

在这里插入图片描述

  百度翻译开放平台也是属于百度智能云的一部分,所以你如果注册过百度的账号都是可以直接登录,当然最好做一下开发者认证,这样一些API的开放力度会大一些,再来说一下写这篇文章的初衷吧,首先我是弄过百度的翻译的,我之前并没有写过这方面的博客,而有读者看过我之前写的关于百度语音识别和百度文字识别的博客,于是问我百度翻译的相关问题,其实他突然这么问我,我也是很懵逼的(´⊙ω⊙`)。因为你光凭一个现象并不足以解决这个问题。一般情况下,按着官方文档来做基本上没问题,剩下的就是细节上的处理了,所以借着这个机会,索性写一篇这样的文章,就当是做个记录吧。   熟悉我写百度类似文章思路的朋友肯定知道,第一步是创建平台应用,点击百度翻译开放平台进入,至于登录和注册以及实名认证和开发者认证就没有讲述的必要了,如果你自己连这几步都无法独立完成的话,我也没有什么好说的了。如下图所示,我已经登录好了。 在这里插入图片描述

点击管理控制台,会让你先完成个人认证,如果你是第一次进入的话,认证完之后会出现 在这里插入图片描述 往下滑,你只要填写姓名和身份证号码即可,一个身份证只能认证一个账号,所以如果你已经认证过了,但是又想用另一个账号来做这个测试,你可以点击暂不认证, 在这里插入图片描述 这个消息是告诉你,你已经成功注册成为百度翻译的开发者,然后点击开通服务。 在这里插入图片描述 选择好之后点击下一步,点击开通标准版,你就不需要申请认证了,直接可以填写申请表格 在这里插入图片描述 开始填表 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 填写完资料之后,点击提交申请 在这里插入图片描述 点击前往管理控制台。然后找到你的APP ID,这个很重要,要在项目中使用的。 在这里插入图片描述 官方我的文档我就不去介绍了,用自己的理解来写。现在已经有了这个APP ID了,服务也开通好了,下面创建测试项目。

二、创建及配置项目

  开大打开Android Studio,新建一个名为TranslateDemo的项目,如下图所示: 在这里插入图片描述 点击Finish完成创建。在这篇文章里,需要去自己去访问网络,所以需要添加一些依赖库 先在工程的build.gradle中添加

maven { url "https://jitpack.io" }

在这里插入图片描述

然后在app模块下的build.gradle中添加网络访问依赖库和其他的依赖

//网络访问 implementation 'com.squareup.okhttp3:okhttp:3.10.0' //下拉框 implementation 'com.github.arcadefire:nice-spinner:1.4.3' //卡片视图 implementation 'androidx.cardview:cardview:1.0.0' //GSON解析 implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

在这里插入图片描述

  而其中okhttp是一个你做Android开发必须要知道的一个库,很多公司在面试的时候都会问这个库的底层原理,有想法可以详细的去官网了解,这是github上的地址:okhttp,有兴趣就可以去了解。文章中只是简单的使用而已,这里先说明,然后Sync。

然后在AndroidManifest.xml中添加网络访问权限

在这里插入图片描述 下面可以进入到正式的编码环节了。激动的心,颤抖的手,我相信你已经迫不及待了吧,当然我会尽我所能的讲清楚每一个环节,哪怕你觉得我啰嗦也好。

三、编码 1. 修改外观与布局

既然是编码,首先我要改变主题的外观,作为颜值控,我不运行这个丑的软件在我的手机上运行,这个项目你现在运行看到的页面是很丑的,来看看有多丑。 在这里插入图片描述 要想软件过得去,页面总得带点绿,这就是Google的直男审美。下面我都要改成白色,并且去掉它默认的顶部ActionBar。找到styles.xml文件并打开,修改代码如下:

#FFF #FFF @color/colorAccent

这里我将主题样式的颜色从原谅绿改成了白色,并且NoActionBar去掉动作栏。然后你再运行一下 在这里插入图片描述 emmm…怎么说呢,感觉怪怪的,不行,还得再改改。打开MainActivity,在onCreate中增加如下代码:

//设置亮色状态栏模式 systemUiVisibility在Android11中弃用了,可以尝试一下。 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

其实使用这段代码的时候应该先判断Android的版本,这个在Android6.0以上生效,不过这只是做测试,所以我就不做判断了,因为我的手机是10.0,但是在实际的开发中还是要做的,这就涉及到Android版本适配了,比较多复杂,网络上的文章比较多,自行搜索。好了,下面运行一下: 在这里插入图片描述 看到状态栏了,不过好像还少了点什么,打开activity_main.xml,修改后代码如下:

再运行一下: 在这里插入图片描述 嗯,效果喜人,看上去就是辣么滴顺眼。然后我贴上完整的布局代码,如下所示:

这个布局里面,我现在隐藏了两块区域。第一块是翻译后的语言区域,第二块是翻译后的结果区域。运行的效果如下: 在这里插入图片描述

2. 初始化控件

在MainActivity中,声明变量

private LinearLayout beforeLay;//翻译之前的布局 private NiceSpinner spLanguage;//语言选择下拉框 private LinearLayout afterLay;//翻译之后的布局 private TextView tvFrom;//翻译源语言 private TextView tvTo;//翻译目标语言 private EditText edContent;//输入框(要翻译的内容) private ImageView ivClearTx;//清空输入框按钮 private TextView tvTranslation;//翻译 private LinearLayout resultLay;//翻译结果布局 private TextView tvResult;//翻译的结果 private ImageView ivCopyTx;//复制翻译的结果 private String fromLanguage = "auto";//目标语言 private String toLanguage = "auto";//翻译语言 private ClipboardManager myClipboard;//复制文本 private ClipData myClip; //剪辑数据 private String appId = "20201125000625305";//APP ID 来源于百度翻译平台 请使用自己的 private String key = "6vjmDnNxypmebgbzKxul";//秘钥 来源于百度翻译平台 请使用自己的 //配置初始数据 private List data = new LinkedList(Arrays.asList( "自动检测语言", "中文 → 英文", "英文 → 中文", "中文 → 繁体中文", "中文 → 粤语", "中文 → 日语", "中文 → 韩语", "中文 → 法语", "中文 → 俄语", "中文 → 阿拉伯语", "中文 → 西班牙语 ", "中文 → 意大利语"));

然后新写一个initView的方法。在这里对控件进行初始化并给予点击事件,并且数据赋值,

/** * 初始化控件视图 */ private void initView() { //设置亮色状态栏模式 systemUiVisibility在Android11中弃用了,可以尝试一下。 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //控件初始化 beforeLay = findViewById(R.id.before_lay); spLanguage = findViewById(R.id.sp_language); afterLay = findViewById(R.id.after_lay); tvFrom = findViewById(R.id.tv_from); tvTo = findViewById(R.id.tv_to); edContent = findViewById(R.id.ed_content); ivClearTx = findViewById(R.id.iv_clear_tx); tvTranslation = findViewById(R.id.tv_translation); resultLay = findViewById(R.id.result_lay); tvResult = findViewById(R.id.tv_result); ivCopyTx = findViewById(R.id.iv_copy_tx); //点击时间 ivClearTx.setOnClickListener(this); ivCopyTx.setOnClickListener(this); tvTranslation.setOnClickListener(this); //设置下拉数据 spLanguage.attachDataSource(data); editTextListener();//输入框监听 spinnerListener();//下拉框选择监听 //获取系统粘贴板服务 myClipboard = (ClipboardManager) this.getSystemService(CLIPBOARD_SERVICE); } 3. 输入框监听

editTextListener方法代码:

/** * 输入监听 */ private void editTextListener() { edContent.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { ivClearTx.setVisibility(View.VISIBLE);//显示清除按钮 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { ivClearTx.setVisibility(View.VISIBLE);//显示清除按钮 } @Override public void afterTextChanged(Editable s) { ivClearTx.setVisibility(View.VISIBLE);//显示清除按钮 String content = edContent.getText().toString().trim(); if (content.isEmpty()) {//为空 resultLay.setVisibility(View.GONE); tvTranslation.setVisibility(View.VISIBLE); beforeLay.setVisibility(View.VISIBLE); afterLay.setVisibility(View.GONE); ivClearTx.setVisibility(View.GONE); } } }); } 4. 语言选择监听

spinnerListener方法代码如下:

/** * 语言类型选择 */ private void spinnerListener() { spLanguage.setOnSpinnerItemSelectedListener(new OnSpinnerItemSelectedListener() { @Override public void onItemSelected(NiceSpinner parent, View view, int position, long id) { switch (position) { case 0://自动检测 fromLanguage = "auto"; toLanguage = fromLanguage; break; case 1://中文 → 英文 fromLanguage = "zh"; toLanguage = "en"; break; case 2://英文 → 中文 fromLanguage = "en"; toLanguage = "zh"; break; case 3://中文 → 繁体中文 fromLanguage = "zh"; toLanguage = "cht"; break; case 4://中文 → 粤语 fromLanguage = "zh"; toLanguage = "yue"; break; case 5://中文 → 日语 fromLanguage = "zh"; toLanguage = "jp"; break; case 6://中文 → 韩语 fromLanguage = "zh"; toLanguage = "kor"; break; case 7://中文 → 法语 fromLanguage = "zh"; toLanguage = "fra"; break; case 8://中文 → 俄语 fromLanguage = "zh"; toLanguage = "ru"; break; case 9://中文 → 阿拉伯语 fromLanguage = "zh"; toLanguage = "ara"; break; case 10://中文 → 西班牙语 fromLanguage = "zh"; toLanguage = "spa"; break; case 11://中文 → 意大利语 fromLanguage = "zh"; toLanguage = "it"; break; default: break; } } }); } 5. 页面点击事件

同时要实现点击事件的监听, 在这里插入图片描述 鼠标点击这一行代码,然后使用快捷键,Alt + 回车 在这里插入图片描述 选择第一项,然后回车 在这里插入图片描述 点击OK,之后会重写onClick方法。这里不止一个控件,所以要根据view的id来判断才行。

/** * 页面点击事件 * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_clear_tx://清空输入框 edContent.setText("");//清除文本 ivClearTx.setVisibility(View.GONE);//清除数据之后隐藏按钮 break; case R.id.iv_copy_tx://复制翻译后的结果 String inviteCode = tvResult.getText().toString(); myClip = ClipData.newPlainText("text", inviteCode); myClipboard.setPrimaryClip(myClip); showMsg("已复制"); break; case R.id.tv_translation://翻译 translation();//翻译 break; default: break; } } /** * Toast提示 * @param msg */ private void showMsg(String msg) { Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); }

下面重点来看看这个翻译的方法,这里面的东西还挺多的。

6. 翻译

  既然是翻译首先获取到输入的文字,如下所示:

/** * 翻译 */ private void translation() { //获取输入的内容 String inputTx = edContent.getText().toString().trim(); //判断输入内容是否为空 if (!inputTx.isEmpty() || !"".equals(inputTx)) {//不为空 tvTranslation.setText("翻译中..."); tvTranslation.setEnabled(false);//不可更改,同样就无法点击 String salt = num(1);//随机数 //拼接一个字符串然后加密 String spliceStr = appId + inputTx + salt + key;//根据百度要求 拼接 String sign = stringToMD5(spliceStr);//将拼接好的字符串进行MD5加密 作为一个标识 //异步Get请求访问网络 asyncGet(inputTx, fromLanguage, toLanguage, salt, sign); } else {//为空 showMsg("请输入要翻译的内容!"); } }

这里先判断了输入框的值是否为null或者“”,不是则改变翻译按钮的文字显示,并且不可点击,给用户一种正在翻译的假象。之后就是生成一个随机数,这个是按照百度的要求来的,方法很简单,就不过多解释了。

/** * 随机数 (根据百度的要求需要一个随机数) */ public static String num(int a) { Random r = new Random(a); int ran1 = 0; for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3