android视频分享功能吗,Unity 调用 Android 分享功能(基于ShareRec SDK视频分享)
需求
Mob 平臺(tái)是一個(gè)強(qiáng)大的提供分享功能的平臺(tái),為移動(dòng)開(kāi)發(fā)者提供 ShareSDK 社交分享、ShareREC 手游錄像分享、短信驗(yàn)證碼 SDK 及 BigApp 等免費(fèi)服務(wù)。
Unity 使用 ShareREC 來(lái)作視頻錄制分享以及可以滿足大部分需求,但是自帶的 UI 實(shí)在是有點(diǎn)簡(jiǎn)陋。雖然可以進(jìn)行 UI 自定義,但是對(duì)于沒(méi)有 UI 的同學(xué)來(lái)說(shuō),使用 Android 或 IOS 自帶的分享功能來(lái)做即簡(jiǎn)單又便捷。
本文演示的是 Unity 使用 ShareRec 錄制視頻并調(diào)用 Android 自帶分享功能進(jìn)行分享。
ShareRec.gif
一、準(zhǔn)備工作
1.1 mob.com賬號(hào)申請(qǐng)
點(diǎn)擊進(jìn)入 Mob官網(wǎng),注冊(cè)賬號(hào)進(jìn)入后臺(tái),添加應(yīng)用后會(huì)獲得 Appkey 和 App Secret 一會(huì)兒會(huì)用到。
點(diǎn)擊左邊的 SDK 產(chǎn)品來(lái)添加 SDK 功能,本例使用的 ShareRec 視頻分享,點(diǎn)擊添加。
添加 ShareRec.png
成功添加后會(huì)顯示已開(kāi)通產(chǎn)品今日昨日數(shù)據(jù)。
1.2 SDK 下載
因?yàn)楸纠褂玫氖?Unity + Android 開(kāi)發(fā),所以下載 ShareREC For Android Unity SDK,可以返回首頁(yè)找到下載,也可以直接點(diǎn)擊下方傳送門:
ShareREC For Android Unity 下載到本地。
二、Unity 項(xiàng)目準(zhǔn)備
2.1 SDK 導(dǎo)入
把下載好的文件解壓,找到ShareREC的unitypackage,雙擊導(dǎo)入當(dāng)前 Unity 項(xiàng)目。
MainCamera 添加 ShareREC 腳本:點(diǎn)擊 MainCamera,屬性面板點(diǎn)擊 Add ComPonment 搜索 ShareREC 并添加。
填寫(xiě)相關(guān)參數(shù):
MainCamera ShareRec 參數(shù)
App Key 和 App Secret 填寫(xiě)剛才申請(qǐng)好的,如果只是測(cè)試,使用默認(rèn)的即可;
MaxFrameSize表示錄制出來(lái)的視頻最大分辨率;
VideoQuality表示視頻質(zhì)量,會(huì)根據(jù)視頻分辨率自動(dòng)調(diào)整視頻碼率;
MinDuration是視頻最短時(shí)長(zhǎng),單位為秒;
RecordAudioFromMic表示從麥克風(fēng)捕獲聲音輸入;
SoftwareAudioEncoder和SoftwareVideoEncoder表示強(qiáng)制使用軟件音視頻編碼器對(duì)視頻進(jìn)行編碼,勾選后兼容性更高;
CacheFolder表示視頻文件輸出目錄的路徑。
2.2 Unity 代碼邏輯
創(chuàng)建一個(gè) Cube 放到 MainCamera 視野中,掛上讓它自轉(zhuǎn)的代碼方便看錄制效果。
void Update () {
this.transform.RotateAround(this.transform.position, Vector3.up, Time.deltaTime * 50);
}
寫(xiě)幾個(gè)按鈕并綁定 ShareRec 提供的相應(yīng)功能。
按鈕綁定事件.png
是否支持 --> ShareREC.IsAvailable(); true 表示當(dāng)前設(shè)備支持錄制,反之不支持。
開(kāi)始按鈕 --> ShareREC.StartRecorder(); 開(kāi)始錄制。
停止按鈕 --> ShareREC.StopRecorder(); 停止錄制。
個(gè)人資料 --> ShareREC.ShowProfile(); 打開(kāi) SDK 自帶個(gè)人資料頁(yè)面。
視頻列表 --> ShareREC.ShowVideoCenter(); 打開(kāi)視頻列表頁(yè)面
分享前添加描述信息 --> SetText的優(yōu)先級(jí)高于AddCustomAttr,因此一旦兩者都調(diào)用,后者將不起作用。
// 設(shè)置描述
ShareREC.SetText("視頻描述");
// 添加自定義字段
ShareREC.AddCustomAttr("字段名稱", "字段數(shù)值");
分享按鈕 --> ShareREC.ShowShare(); 將直接調(diào)用 ShareREC 自帶的分享頁(yè)面。
沒(méi)什么特殊要求的話,直接使用ShareREC.ShowShare();就可以進(jìn)行分享。
但是本文要實(shí)現(xiàn)的是通過(guò)與 Android 交互來(lái)進(jìn)行分享,所以點(diǎn)擊分享按鈕后發(fā)送消息給 Android 處理。錄制完成后將視頻路徑發(fā)送給 Android 來(lái)分享:
private void AndrShareVedio(string path)
{
// 調(diào)用 UnityPlayer 類
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
// 調(diào)用該類的 share 方法,path 是 Share 方法的參數(shù),傳入視頻地址
jo.Call("share", path);
}
2.3 Unity 導(dǎo)出為 Android Studio 項(xiàng)目
Unity 導(dǎo)出項(xiàng)目文件
三、合并到 Android 項(xiàng)目
3.1 新建 Android 項(xiàng)目
新建 Android 項(xiàng)目,包名與 Unity 導(dǎo)出的 Android 項(xiàng)目保持一致。
新建 Android 項(xiàng)目.png
3.2 添加 libs
拷貝 Unity 導(dǎo)出的 Android 項(xiàng)目下的 libs 文件夾下的 jar 文件到 Android 項(xiàng)目。
拷貝 libs.png
添加為項(xiàng)目依賴,右鍵 unity-classes.jar 文件并 Add As Library。
添加 library.png
3.3 拷貝 main 目錄下文件
拷貝 Unity 導(dǎo)出的 Android 項(xiàng)目 assets 目錄下的文件到 Android 項(xiàng)目,如果沒(méi)有 assets 文件夾就直接拷貝整個(gè)文件夾。
拷貝 assets 文件.png
拷貝 src/main 目錄下的 java 文件到 Android 項(xiàng)目。UnityPlayerActivity 文件一會(huì)兒就作為程序的主入口。
拷貝 java 文件.png
拷貝 jniLibs 文件夾下的文件,新項(xiàng)目可能沒(méi)有該文件夾,所以這里直接拷貝整個(gè)文件夾。
拷貝 jniLibs.png
res 文件下如果有相關(guān)的資源,如 app 圖標(biāo)之類的,拷貝即可。
打開(kāi)Unity 導(dǎo)出的 Android 項(xiàng)目的 AndroidManifest.xml 文件,拷貝 UnityActivity 相關(guān)配置到 Android 項(xiàng)目的 AndroidManifest.xml,這里把 UnityActivity 當(dāng)做啟動(dòng) Activity,所以原來(lái) MainActivity 的 標(biāo)簽可以全部刪除。
UnityActivity Manifest.png
UnityActivity Manifest2.png
如果報(bào)錯(cuò)拋紅線的話,快捷鍵 Alt + Enter 選 Disable 就可以了。這里是 UnityActivity 設(shè)置的一些用不到屬性,不用理會(huì)就好。
接著拷貝權(quán)限相關(guān):
拷貝權(quán)限.png
3.4 導(dǎo)入 ShareRec module 作為依賴
拷貝 ShareRec module 到項(xiàng)目主目錄下
拷貝 ShareRec module.png
打開(kāi) Android 項(xiàng)目下的 settings.gradle 文件,添加 include 'ShareRec' 并點(diǎn)擊 Sync Now。這是把 ShareRec moudle 作為項(xiàng)目的 module 添加。
添加 module.png
報(bào)錯(cuò)的話說(shuō)明本地沒(méi)有 ShareRec 的相關(guān) Build Tools 或者 SDK,點(diǎn)擊更新下載。
Error Gradle Sync.png
如果更新不了,打開(kāi) ShareRec 的相關(guān)設(shè)置,修改它的 Build Tools 版本為你機(jī)子上有的版本。
更新成功后可能會(huì)報(bào)錯(cuò),提示為某些屬性重復(fù)了。點(diǎn)擊定位到出錯(cuò)的文件,把重復(fù)的內(nèi)容注釋掉即可。之后可以 Build --> Make Project 重新編譯下。
注釋出錯(cuò)屬性.png
右鍵打開(kāi) Module Settings,選擇 app 的 Dependencies 選項(xiàng),點(diǎn)擊加號(hào)選擇 module dependency,添加 ShareSDK 作為依賴。點(diǎn)擊OK。
添加 ShareRec 依賴.png
3.5 Android 接收 Unity 發(fā)送的分享操作
因?yàn)?UnityPlayerActivity 是程序的主 Activity,所以在這里相應(yīng) Unity 調(diào)用的方法。打開(kāi) UnityPlayerActivity 類,添加如下方法:
// Unity 調(diào)用 Share 方法傳遞視頻路徑
public void share(final String path){
Log.i("videopath",path);
ShareUtils.shareVideo(this,path);
}
ShareUtils 是一個(gè)工具類,包含分享圖片、文字、視頻等功能。
package com.sky.sharetest;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
/**
* Created by yuetu-develop on 2017/9/22.
*/
public class ShareUtils {
public static void share(Context context, int stringRes, String title) {
share(context, context.getString(stringRes), title);
}
public static void shareImage(Context context, Uri uri, String title) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/jpeg");
context.startActivity(Intent.createChooser(shareIntent, title));
}
public static void share(Context context, String extraText, String extraTitle) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
intent.putExtra(Intent.EXTRA_TEXT, extraTitle+"\n"+extraText);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(
Intent.createChooser(intent, "分享"));
}
public static void shareVideo(Context context,String videoPath){
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND); //分享視頻只能單個(gè)分享
shareIntent.putExtra(Intent.EXTRA_STREAM, videoPath);
shareIntent.setType("audio/*");
context.startActivity(Intent.createChooser(shareIntent, "分享到"));
}
}
四、總結(jié)
報(bào)錯(cuò)看Log,最后項(xiàng)目結(jié)構(gòu)圖
Final 結(jié)構(gòu)圖.png
總結(jié)
以上是生活随笔為你收集整理的android视频分享功能吗,Unity 调用 Android 分享功能(基于ShareRec SDK视频分享)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 自定义banner,An
- 下一篇: android代码 根据黑名单拦截短信,