炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述Unity3D通过Whatsapp发送AudioClip相关的知识,希望能为你提供帮助。
我正在开发一个应用程序功能,以便能够将我在我的应用程序中的声音传递给whatsapp。我已经取得了一些进展,但我仍然坚持获取AudioClip的字节数组。
SS
所以我需要从资源文件夹中获取audioclip并将其写入我给出的路径,然后将其发送到whatsapp。
这会出错
【Unity3D通过Whatsapp发送AudioClip】FormatException:长度无效。 System.Convert.FromBase64String(System.String s)(at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:146)
void sendProccess()
{
string s = Resources.Load<
AudioClip>
("Bava").ToString();
byte[] dataToSave = System.Convert.FromBase64String(s);
string destination = Path.Combine(Application.persistentDataPath, System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".mp3");
File.WriteAllBytes(destination, dataToSave);
if (!Application.isEditor)
{
//instantiate the class Intent
androidjavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<
AndroidJavaObject>
("setAction", intentClass.GetStatic<
string>
("ACTION_SEND"));
//instantiate the class Uri
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriObject = uriClass.CallStatic<
AndroidJavaObject>
("parse", "file://" + destination);
//call putExtra with the uri object of the file
intentObject.Call<
AndroidJavaObject>
("putExtra", intentClass.GetStatic<
string>
("EXTRA_STREAM"), uriObject);
intentObject.Call<
AndroidJavaObject>
("setType", "audio/mp3");
//instantiate the class UnityPlayer
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
//instantiate the object currentActivity
AndroidJavaObject currentActivity = unity.GetStatic<
AndroidJavaObject>
("currentActivity");
//call the activity with our Intent
currentActivity.Call("startActivity", intentObject);
}
}
提前致谢。
答案在以下行 -
string s = Resources.Load<
AudioClip>
("Bava").ToString();
ToString
方法returns the name of the object。您应该使用
AudioClip.GetData
方法从音频剪辑中获取原始数据 -AudioClip clip = Resources.Load<
AudioClip>
("Bava")
float[] samples = new float[clip.samples * clip.channels];
clip.GetData(samples, 0);
然后,您可以使用BinaryWriter或BitConverter将
samples
数组转换为其字节表示形式以供进一步使用。另一答案这项工作非常适合我
Application.OpenURL("whatsapp://send?phone=9999878653&
text=[hello]");
推荐阅读
- java.lang.NoSuchMethodError public default void android.content.ServiceConnection.onBindingDied(andr
- 从MyProject-App.xml中检测versionNumber( Adobe AIR)
- 使用Adobe Air构建Android本机库
- Android Air GoViral ANE showFacebookShareDialog throw modeOverride错误
- 如何在Android AIR上获取可用网络列表()
- 如何在Windows上进行iPad flash app调试( [重复])
- 穿越Biapplicative
- aws cognito用户获取id令牌android
- Android Youtube Auth登录SDK