因为之前没有集成过百度云推送,接手新项目之后项目需求是接入百度云推送,没办法因为项目是海外项目所以只能硬着头皮来接入了,话不多说开始你的表演:

首先就是去百度云推送的官网去创建应用并启用:

.在配置详情页中,扫描二维码或者点击下载SDK,可以下载对应包名的demo,个人建议直接点击右上角的下载SDK来下载demo,因为我刚开始使用二维码下载下来的demo并不是最新的版本,也没有百度云产品的简介。

.运行demo没问题也可以推送,感觉百度云推送还是很nice的,so那就去集成到咱们自己的项目中吧

.将自己需要的文件提取出来,尽可能的去掉无用的东西。**demo中包好了许多功能是你用不到的,因此需要将自己需要功能的相关文件摘出来。结果测试没问题。需要的东西如下:
pushservice-5.2.0.12.jar包,所有的.so文件,notification_custom_builder.xml(这是通知栏的布局),

注意:如果您的 Android 工程使用的是 Android API level 21 及以上的版本,您的通知图标背景 必须是透明的,否则在 Android5.0 及以上的机器上通知图标可能会变成白色的方块。

  1. 在该工程下创建一个 libs 文件夹

  2. 将 pushservice-VERSION.jar 拷贝到 libs 文件夹中,把 SDK 压缩包中的 libs/armeabi 目录下的

    libbdpush_V2_9.so 拷贝到工程对应的 libs/armeabi 文件夹下。

    1. a)  如果你的工程中没有使用其他的.so,建议只复制 armeabi 文件夹。

    2. b)  如果你的工程中还使用了其他的.so 文件,只需要拷贝云推送对应目录下的.so 文件。

    3. c)  如果你使用的 Android 开发环境是 Android Stutio,在工程中“src/main”目录中新建名为

      jniLibs 的目录,将 libs 文件夹中文件拷贝到“jniLibs”目录内。

.AndroidManifest.xm中的权限:

<!-- Push service 运行需要的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 富媒体需要声明的权限 -->
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<!-- 适配 Android N 系统必需的 ContentProvider 写权限声明-->
<uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.你的包名" />
<permission
android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.你的包名 " android:protectionLevel="normal">

.AndroidManifest.xml 注册消息接收 Receiver

客户端需实现自己的 MyPushMessageReceiver,接收 Push 服务的消息,并实现对消息的处理。以

下是 AndroidManifest.xml 中的配置代码。

<!-- push 应用定义消息 receiver 声明 -->
<receiver android:name="YourPackageName.MyPushMessageReceiver">
<intent-filter>
<!-- 接收 push 消息 -->
<action android:name="com.baidu.android.pushservice.action.MESSAGE" />
<!-- 接收 bind、setTags 等 method 的返回结果 -->
<action android:name="com.baidu.android.pushservice.action.RECEIVE" />
<!-- 可选,接受通知点击事件,和通知自定义内容 -->
<action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
</intent-filter>
</receiver>

7. AndroidManifest.xml 增加 pushservice 配置

<!-- push service start -->
<!-- 用于接收系统消息以保证 PushService 正常运行 -->
<receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=": bdservice_v1" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
<action android:name="com.baidu.android.pushservice.action.media.CLICK" />
<!-- 以下四项为可选的 action 声明,可大大提高 service 存活率和消息到达速度 -->
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver><!-- Push 服务接收客户端发送的各种请求-->
<receiver android:name="com.baidu.android.pushservice.RegistrationReceiver"
android:process=": bdservice_v1" >
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.METHOD " />
<action android:name="com.baidu.android.pushservice.action.BIND_SYNC " />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Push 服务 -->
<!-- 注意:在 4.0 及以后的版本需加上如下所示的 intent-filter action -->
<service android:name="com.baidu.android.pushservice.PushService"
android:exported="true"
android:process=":bdservice_v1" >
<intent-filter >
<action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
</intent-filter>
</service>
<!-- 注意:在 4.4 及以后的版本需加上如下所示的 service -->
<service android:name="com.baidu.android.pushservice.CommandService"
android:exported="true" >
</service>
<!-- 适配 Android N 系统所必需的 ContentProvider, 写权限中包含应用包名-->
</provider
android:name="com.baidu.android.pushservice.PushInfoProvider" android:authorities="YourPackageName.bdpush" android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName"android:protectionLevel = "signature" android:exported="true" />
<!-- push service end -->

8. 富媒体功能(可选)

富媒体是相对于一般消息而言,一种高级的通知,提供文本、视频、音乐等形式的消息。您需要 把富媒体相关的资源文件(包括 layout 文件、图片和字符资源分别添加到相应的资源目录),同时在 AndroidManifest.xml 文件里声明富媒体 Activity。如果应用不支持富媒体推送功能,可以不添加相关的 资源和声明。在 targetSdkVersion>=23 时,需要应用具有 sd 卡读写权限,否则富媒体不能正常展示。

◆ 资源

- Layout:
◼ bpush_download_progress.xml ◼ bpush_media_list_item.xml
◼ bpush_media_list.xml

- drawable:
◼ bpush_list_item_bg.9.png ◼ bpush_return_btn.png
◼ bpush_top_bg.9.png

.AndroidManifest.xml声明权限

<!--富媒体需要声明的权限 --/>
<uses-permission
android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
<uses-permission
android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission
android:name="android.permission.EXPAND_STATUS_BAR" />

.AndroidManifest.xml声明Activity

<!-- push 富媒体,不使用富媒体推送不需要添加 -->
<activity
android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity" android:configChanges="orientation|keyboardHidden" android:label="MediaViewActivity" >
</activity>
<activity
android:name="com.baidu.android.pushservice.richmedia.MediaListActivity" android:configChanges="orientation|keyboardHidden" android:label="MediaListActivity"
android:launchMode="singleTask" >
</activity>

9. 请确保 AndroidManifest.xml 中声明了必须的组件以及组件的属性,否则 Push 服务部分功能 可能无法正常工作。

.客户端程序需要自己实现一个 Receiver 来接收 Push 消息、接口调用回调以及通知点击事件,也 就是上文提到的 AndrodManifest.xml 中注册的 receiver ,该 Receiver 需要继承 PushMessageReceiver,示例如下:

/** Push消息处理receiver。请编写您需要的回调函数, 一般来说: onBind是必须的,用来处理startWork返回值;*onMessage用来接收透传消息; onSetTags、onDelTags、onListTags是tag相关操作的回调;*onNotificationClicked在通知被点击时回调; onUnbind是stopWork接口的返回值回调* 返回值中的errorCode,解释如下:*0 - Success*10001 - Network Problem*10101  Integrate Check Error*30600 - Internal Server Error*30601 - Method Not Allowed*30602 - Request Params Not Valid*30603 - Authentication Failed*30604 - Quota Use Up Payment Required*30605 -Data Required Not Found*30606 - Request Time Expires Timeout*30607 - Channel Token Timeout*30608 - Bind Relation Not Found*30609 - Bind Number Too Many* 当您遇到以上返回错误时,如果解释不了您的问题,请用同一请求的返回值requestId和errorCode联系我们追查问题。**/public class MyPushMessageReceiver extends PushMessageReceiver {/** TAG to Log */public static final String TAG = MyPushMessageReceiver.class.getSimpleName();/*** 调用PushManager.startWork后,sdk将对push* server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送,需要把这里获取的channel* id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。** @param context*            BroadcastReceiver的执行Context* @param errorCode*            绑定接口返回值,0 - 成功* @param appid*            应用id。errorCode非0时为null* @param userId*            应用user id。errorCode非0时为null* @param channelId*            应用channel id。errorCode非0时为null* @param requestId*            向服务端发起的请求id。在追查问题时有用;* @return none*/@Overridepublic void onBind(Context context, int errorCode, String appid,String userId, String channelId, String requestId) {String responseString = "onBind errorCode=" + errorCode + " appid="+ appid + " userId=" + userId + " channelId=" + channelId+ " requestId=" + requestId;Log.d(TAG, responseString);if (errorCode == 0) {// 绑定成功}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** 接收透传消息的函数。** @param context*            上下文* @param message*            推送的消息* @param customContentString*            自定义内容,为空或者json字符串*/@Overridepublic void onMessage(Context context, String message,String customContentString) {String messageString = "透传消息 message=\"" + message+ "\" customContentString=" + customContentString;Log.d(TAG, messageString);// 自定义内容获取方式,mykey和myvalue对应透传消息推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(customContentString)) {JSONObject customJson = null;try {customJson = new JSONObject(customContentString);String myvalue = null;if (!customJson.isNull("mykey")) {myvalue = customJson.getString("mykey");}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, messageString);}/*** 接收通知点击的函数。** @param context*            上下文* @param title*            推送的通知的标题* @param description*            推送的通知的描述* @param customContentString*            自定义内容,为空或者json字符串*/@Overridepublic void onNotificationClicked(Context context, String title,String description, String customContentString) {String notifyString = "通知点击 title=\"" + title + "\" description=\""+ description + "\" customContent=" + customContentString;Log.d(TAG, notifyString);// 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(customContentString)) {JSONObject customJson = null;try {customJson = new JSONObject(customContentString);String myvalue = null;if (!customJson.isNull("mykey")) {myvalue = customJson.getString("mykey");}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, notifyString);}/*** 接收通知到达的函数。** @param context*            上下文* @param title*            推送的通知的标题* @param description*            推送的通知的描述* @param customContentString*            自定义内容,为空或者json字符串*/@Overridepublic void onNotificationArrived(Context context, String title,String description, String customContentString) {String notifyString = "onNotificationArrived  title=\"" + title+ "\" description=\"" + description + "\" customContent="+ customContentString;Log.d(TAG, notifyString);// 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(customContentString)) {JSONObject customJson = null;try {customJson = new JSONObject(customContentString);String myvalue = null;if (!customJson.isNull("mykey")) {myvalue = customJson.getString("mykey");}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑// 你可以參考 onNotificationClicked中的提示从自定义内容获取具体值updateContent(context, notifyString);}//    /**
//     * setTags() 的回调函数。
//     *
//     * @param context
//     *            上下文
//     * @param errorCode
//     *            错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。
//     * @param successTags
//     *            设置成功的tag
//     * @param failTags
//     *            设置失败的tag
//     * @param requestId
//     *            分配给对云推送的请求的id
//     */@Overridepublic void onSetTags(Context context, int errorCode,List<String> sucessTags, List<String> failTags, String requestId) {String responseString = "onSetTags errorCode=" + errorCode+ " sucessTags=" + sucessTags + " failTags=" + failTags+ " requestId=" + requestId;Log.d(TAG, responseString);// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}//    /**
//     * delTags() 的回调函数。
//     *
//     * @param context
//     *            上下文
//     * @param errorCode
//     *            错误码。0表示某些tag已经删除成功;非0表示所有tag均删除失败。
//     * @param successTags
//     *            成功删除的tag
//     * @param failTags
//     *            删除失败的tag
//     * @param requestId
//     *            分配给对云推送的请求的id
//     */@Overridepublic void onDelTags(Context context, int errorCode,List<String> sucessTags, List<String> failTags, String requestId) {String responseString = "onDelTags errorCode=" + errorCode+ " sucessTags=" + sucessTags + " failTags=" + failTags+ " requestId=" + requestId;Log.d(TAG, responseString);// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** listTags() 的回调函数。** @param context*            上下文* @param errorCode*            错误码。0表示列举tag成功;非0表示失败。* @param tags*            当前应用设置的所有tag。* @param requestId*            分配给对云推送的请求的id*/@Overridepublic void onListTags(Context context, int errorCode, List<String> tags,String requestId) {String responseString = "onListTags errorCode=" + errorCode + " tags="+ tags;Log.d(TAG, responseString);// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** PushManager.stopWork() 的回调函数。** @param context*            上下文* @param errorCode*            错误码。0表示从云推送解绑定成功;非0表示失败。* @param requestId*            分配给对云推送的请求的id*/@Overridepublic void onUnbind(Context context, int errorCode, String requestId) {String responseString = "onUnbind errorCode=" + errorCode+ " requestId = " + requestId;Log.d(TAG, responseString);if (errorCode == 0) {// 解绑定成功}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}private void updateContent(Context context, String content) {Log.d(TAG, "updateContent");String logText = "" + Utils.logStringCache;if (!logText.equals("")) {logText += "\n";}SimpleDateFormat sDateFormat = new SimpleDateFormat("HH-mm-ss");logText += sDateFormat.format(new Date()) + ": ";logText += content;Utils.logStringCache = logText;Intent intent = new Intent();intent.setClass(context.getApplicationContext(), MainActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.getApplicationContext().startActivity(intent);}}

.到这里就已经差不多了,其实百度云推送的集成并没有和其他推送有什么区别很难

.然后就是百度云推送的初始化,官方文档建议初始化放在主Activity不要放在Application里面进行初始化

PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY,"你的api_key");

.ok运行走一波,so easy,当你以为已经结束的时候其实只是刚开始,经过测试,不行!!!!!,接收不到消息。
有的测试机可以收到有的测试机收不到,想啊想,不知道错在哪,然后开始怀疑是不是包冲突了?然后各种方法排除测试等等,没得到任何结论!!

.然后各种百度,但是关于百度云推送的文章实在太少了,偶然间看到大神们的文章:

https://blog.csdn.net/kinglong68/article/details/53507086

https://blog.csdn.net/cdkd123/article/details/50521924

.在build.gradle里要配置下,位置在build.gradle -> android下和compileSdkVersion平级目录:

sourceSets {main {jniLibs.srcDirs = ['src/main/jniLibs']}}

.而不是

sourceSets {  main {   jniLibs.srcDirs = ['libs']  }
}  

我试了试,去掉这句话也可以。
注意,项目中本来配置着
在官网,建议使用Android Studio工具开发者,将.so文件放入jniLibs目录下,奶奶的,为啥不说清楚,gradle中也需要配置!!!

就这样,问题解决了。

.如果想设置响应铃声的问题,这个我没有试,具体可以参考大佬的文章(文末):

https://blog.csdn.net/kinglong68/article/details/53507086

.至此测试,不仅仅是OK,简直nice,都可以推送,内心还有一点小开心外带一点小兴奋

如果这样的话你就等着吃苦瓜吧,因为问题并没有完全解决,你再试试Android 8.0简直是灾难,因为Android在Android O之后取消了设置channelid你发的推送在Android 8.0上根本就没有任何消息可以收到,没办法问度娘吧,然后陷入了死循环,日后的两天在百度 + 百度中度过,找了无数种方法还是不行,看看官方的公众号和QQ群看下吧,发现竟然被注销了,没错你找不到百度云推送的官方客服人员了,没办法,再去官网看看吧,抱着试一试的心态,选择右上角的SDK下载试试吧(因为之前是二维码下载的)

.我去发现压缩包里多出了好多东西,什么文档了,最新的百度云更新状态说明了等等,这官网也是够无聊的,没办法谁让人牛呢,忍了

.在文档里终于找到了Android 8.0的推送解决办法,这里记给大家

.从 SDK 5.8.0 版本开始,提供关于 Android O(8.x)新特性---通知渠道的设置接口。 若您的应用需要适配 Android O(8.x)系统,且将目标版本 targetSdkVersion 设置为 26 及以上

时,可自定义系统所必需的 channelId 和 channelName 字段,若不指定,SDK 将使用渠道名默 认值"Push"。对于 BasicPushNotificationBuilder,所有的通知消息均使用同一个 channel;对 于 CustomPushNotificationBuilder,可根据自定义的 notification_builder_id 编号,来指定 不同 channel。调用方法示例如下:

设置过的 channel 都会显示在系统的应用通知列表中,您可以根据需要调用 Android O 系统 API 删除 SDK 默认的 channelId(“com.baidu.android.pushservice.push”)或自定义的 channelId。 调用方法示例如下:

这里就不说没用的了,直接把解决问题的所有代码贴出来(我是写在了初始化的后面):

        //初始化百度云推送,第三个参数为自己百度推送申请的appkeyPushManager.startWork(this,PushConstants.LOGIN_TYPE_API_KEY,"你的api_key");//与下方代码中 PushManager.setNotificationBuilder(this, 1, cBuilder)中的第二个参数对应CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder( R.layout.notification_custom_builder, R.id.notification_icon, R.id.notification_title, R.id.notification_text);cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL);cBuilder.setNotificationDefaults(Notification.DEFAULT_VIBRATE);cBuilder.setStatusbarIcon(this.getApplicationInfo().icon);cBuilder.setLayoutDrawable(this.getApplicationInfo().icon);cBuilder.setNotificationSound(Uri.withAppendedPath( MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "6").toString());// 若您的应用需要适配Android O(8.x)系统,且将目标版本targetSdkVersion设置为26及以上时:// 可自定义channelId/channelName, 若不设置则使用默认值"Push";// 注:非targetSdkVersion 26的应用无需以下2行调用且不会生效cBuilder.setChannelId("Push");cBuilder.setChannelName("Push");// 推送高级设置,通知栏样式设置为下面的ID,ID应与server下发字段notification_builder_id值保持一致PushManager.setNotificationBuilder(this, 1, cBuilder);

.如果你直接将notification_custom_builder.xml这个布局拷贝进去了,应该就没有多少需要修改的地方了,

.混淆打包说明

如果开发者需要混淆自己的 APK,请在混淆文件(一般默认为 Android 工程下 proguard-project.txt 或者 proguard.cfg)中添加如下说明(VERSION 为版本名称,pushservice-VERSION.jar 为集成的 jar 包 名字):

-libraryjars libs/pushservice-VERSION.jar
-dontwarn com.baidu.**
-keep class com.baidu.**{*; }

.API 说明

本 SDK 中有四个重要的开放类,分别为:PushManager、PushSettings、BasicPushNotificationBuilder 和 CustomPushNotificationBuilder,还有常量类 PushConstants。

到这里算是已经解决了Android 8.0的推送问题了,希望大家可以快快乐乐的工作,本来不想发文章的,但是网上却是没有解决百度云推送Android 8.0问题的文章所以就啰嗦了一下,新手勿喷谢谢,希望解决您的问题,告辞!!!

集成百度云推送,Android8.0系统推送收不到问题解决方案相关推荐

  1. 升级Android8.0系统原来APP图标变为小机器人的问题

    原本显示好好的APP图标,自打升级Android8.0系统后,发现图标显示不正常了,变为原始的小机器人了: 怎么变成小机器人了呢,原本在7.0系统上显示还正常呢,赶紧看一下8.0的变化吧.打开Andr ...

  2. 华为android贡献度,Android8.0系统占比大幅提升,华为、荣耀、小米成为主要贡献...

    原标题:Android8.0系统占比大幅提升,华为.荣耀.小米成为主要贡献 安卓推出Android8.0系统至今已半年有余,如今Android8.1稳定版.Android9.0开发者预览版也发布了,但 ...

  3. android摄像头监控打电话卡死,Android应用开发Android8.0平台Camera monkey拷机卡死异常解决方案...

    本文将带你了解Android应用开发Android8.0平台Camera monkey拷机卡死异常解决方案,希望本文对大家学Android有所帮助. Android8.0平台Camera monkey ...

  4. 不能打游戏的汽车不是好电影院!特斯拉面向国内推送V10.0系统,能辅助变道还能看爱奇艺...

    郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 最近,特斯拉正式向中国车主开始推送V10.0版本Autopilot软件. 车辆可以通过特斯拉OTA空中升级功能自动下载新版软件,用户只需点 ...

  5. 百度云短信v3.0接口升级注意点

    官方文档: V3.0版本升级指导 背景: 官方接口升级,截止2020.8.20日24时,停止v2.0版本接口服务.因项目未进行升级处理,导致短信发送失败:升级过程中遇到几个问题,总结下. 注意点: 1 ...

  6. Ubuntu16.04编译Android8.0系统源码,并刷机 (Pixel XL)

    机子 CPU: 6核 内存: 16G 硬盘:500G SSD 系统:裸的 Ubuntu 16.04 试了Mac和Ubuntu 14.04,Mac中需要安装一堆工具,Ubuntu 14安装Java8很麻 ...

  7. 极光推送 android6.0,极光推送Unity-Android-API

    Android API 停止与恢复推送服务 清除通知 设置允许推送时间 设置通知静默时间 申请权限接口(用于 Android 6.0 及以上系统) 通知栏样式定制 设置保留最近通知条数 本地通知 获取 ...

  8. java百度云文件上传_关于如何在自己项目集成百度云BCE文件上传STS方案

    1. 项目背景 由于本人项目需要,需要在视频点播服务之中需要加载字幕文件(通用格式srt),经过比较好几家的公有云服务,最后选择只有百度云提供字幕服务. 字幕:我们通常在观看外语电影的是,没有国语版时 ...

  9. win10怎么去掉计算机里百度云,主编教你win10系统清除百度云盘盘符的修复方法...

    喜欢使用电脑的小伙伴们一般都会遇到win10系统清除百度云盘盘符的问题,即便很容易处理,还是有朋友不知道win10系统清除百度云盘盘符到底如何处理.最近有不少用户到本站咨询win10系统清除百度云盘盘 ...

最新文章

  1. BC#65 T5 ZYB's Prime
  2. 软件工程——理论、方法与实践⑨
  3. BZOJ 2669 Luogu P3160 [CQOI2012]局部极小值 (容斥原理、DP)
  4. 文件上传错误:Error setting expression 'uploadImage' with value '[Ljava.lang.String;@5ff8a691'...
  5. centos7安装配置rsync以及遇到问题
  6. 如何取消 DiscuzX 帖子被系统自动隐?
  7. JAVA-重写equalse规范、技巧
  8. python语言为什么叫python_Python为什么叫Python,Java又如何而来?
  9. grumble.js
  10. Apache Spark 内存管理详解
  11. 有什么软件可以测试win10电脑性能,微软能否翻盘 Win10系统4K高分优化实测
  12. python表白代码-python告白代码,只属于程序员的浪漫
  13. 美国国际集团(AIG-American International Group)
  14. 计算机存储单元的唯一标志是,存储单元的唯一标志是什么
  15. 空头平仓什么意思_空头开仓和空头平仓是什么意思(贵金属交易口诀)
  16. 基于matlab生物医学影像处理,基于MATLAB的医学图像处理
  17. OSG路径漫游实现与应用
  18. ubuntu20.04 外接显示器检测不到 未知的显示器 显卡安装黑屏 解决方案
  19. linux修改用户用户名,linux怎么修改用户名
  20. 官方通报:kissreiko博文因涉嫌诈骗广告 将永久封号

热门文章

  1. 安卓错误: 找不到R符号_铜丝氧化却找不到原因?你可能忽视了这几个常见错误!【辽宁津达线缆】...
  2. 牙齿修复的类型有哪些?
  3. 视频监控软件开发的需求管理
  4. 热血江湖官服查线器源码
  5. ShopEx 模版标签
  6. java 1.6 jre 下载_java JRE下载、安装以及环境变量的配置图文教程
  7. Cisco3560 交换机密码恢复实例
  8. (HT)超线程加快了 Linux 的速度
  9. gnet: 一个轻量级且高性能的 Go 网络框架
  10. 独孤九剑第六式-支持向量机模型(SVM)