Commit 4e172001eb76caf0474e44b671b0a25eee56ec72

Authored by thiago.filipe
1 parent a6d83150
Exists in IosBuild

Build IOS Preparation

Assets/Scenes/Main.unity
... ... @@ -1286,7 +1286,7 @@ MonoBehaviour:
1286 1286 m_Name:
1287 1287 m_EditorClassIdentifier:
1288 1288 screenManager: {fileID: 2131993094}
1289   - MediaShareAndroid: {fileID: 1120909430}
  1289 + MediaShareIOS: {fileID: 0}
1290 1290 --- !u!4 &210788817
1291 1291 Transform:
1292 1292 m_ObjectHideFlags: 0
... ... @@ -7959,7 +7959,7 @@ GameObject:
7959 7959 - 4: {fileID: 1120909431}
7960 7960 - 114: {fileID: 1120909430}
7961 7961 m_Layer: 0
7962   - m_Name: MediaShareAndroid
  7962 + m_Name: MediaShareIOS
7963 7963 m_TagString: Untagged
7964 7964 m_Icon: {fileID: 0}
7965 7965 m_NavMeshLayer: 0
... ... @@ -7973,7 +7973,7 @@ MonoBehaviour:
7973 7973 m_GameObject: {fileID: 1120909429}
7974 7974 m_Enabled: 1
7975 7975 m_EditorHideFlags: 0
7976   - m_Script: {fileID: 11500000, guid: fd1b12a178cf08b4284859e93194c7a4, type: 3}
  7976 + m_Script: {fileID: 11500000, guid: ff208f584beb2bd43a9751619a94e506, type: 3}
7977 7977 m_Name:
7978 7978 m_EditorClassIdentifier:
7979 7979 --- !u!4 &1120909431
... ...
Assets/Scripts/Export Video/AndroidJavaUti.cs
... ... @@ -1,48 +0,0 @@
1   -using UnityEngine;
2   -using System;
3   -using System.Collections;
4   -
5   -public class AndroidJavaUti : MonoBehaviour {
6   -
7   - private static string m_pkgName;
8   - private static string m_sdCardPath;
9   - public static AndroidJavaObject Activity
10   - {
11   - get
12   - {
13   - AndroidJavaClass jcPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
14   - return jcPlayer.GetStatic<AndroidJavaObject>("currentActivity");
15   - }
16   - }
17   -
18   -
19   - public static string CurrentPkgName
20   - {
21   - get
22   - {
23   - if (m_pkgName == null)
24   - m_pkgName = Activity.Call<string>("getPackageName");
25   - return m_pkgName;
26   - }
27   - }
28   - public static string CurrentSDCardPath
29   - {
30   - get
31   - {
32   - if (m_sdCardPath == null)
33   - {
34   - AndroidJavaClass jc = new AndroidJavaClass("android.os.Environment");
35   - IntPtr getExternalStorageDirectoryMethod = AndroidJNI.GetStaticMethodID(jc.GetRawClass(), "getExternalStorageDirectory", "()Ljava/io/File;");
36   - IntPtr file = AndroidJNI.CallStaticObjectMethod(jc.GetRawClass(), getExternalStorageDirectoryMethod, new jvalue[] { });
37   - IntPtr getPathMethod = AndroidJNI.GetMethodID(AndroidJNI.GetObjectClass(file), "getPath", "()Ljava/lang/String;");
38   - IntPtr path = AndroidJNI.CallObjectMethod(file, getPathMethod, new jvalue[] { });
39   - m_sdCardPath = AndroidJNI.GetStringUTFChars(path);
40   - AndroidJNI.DeleteLocalRef(file);
41   - AndroidJNI.DeleteLocalRef(path);
42   - Debug.Log("m_sdCardPath = " + m_sdCardPath);
43   - }
44   - return m_sdCardPath;
45   - }
46   -
47   - }
48   -}
Assets/Scripts/Export Video/AndroidJavaUti.cs.meta
... ... @@ -1,12 +0,0 @@
1   -fileFormatVersion: 2
2   -guid: e79be87b2ce96744e9141cee2058779b
3   -timeCreated: 1486833877
4   -licenseType: Free
5   -MonoImporter:
6   - serializedVersion: 2
7   - defaultReferences: []
8   - executionOrder: 0
9   - icon: {instanceID: 0}
10   - userData:
11   - assetBundleName:
12   - assetBundleVariant:
Assets/Scripts/Export Video/AndroidPermission.cs
... ... @@ -1,122 +0,0 @@
1   -///////////////////////////////////////////////////////////
2   -///////////////// NoodlePermissionGranter /////////////////
3   -/// Implements runtime granting of Android permissions. ///
4   -/// This is necessary for Android M (6.0) and above. //////
5   -///////////////////////////////////////////////////////////
6   -//////////////////// Noodlecake Studios ///////////////////
7   -///////////////////////////////////////////////////////////
8   -
9   -using UnityEngine;
10   -using System.Collections;
11   -using System;
12   -
13   -public class NoodlePermissionGranter : MonoBehaviour
14   -{
15   -
16   - // subscribe to this callback to see if your permission was granted.
17   - public static Action<bool> PermissionRequestCallback;
18   - public static Action<bool> PermittedAction;
19   -
20   -
21   - // for now, it only implements the external storage permission
22   - public enum NoodleAndroidPermission
23   - {
24   - WRITE_EXTERNAL_STORAGE
25   - }
26   -
27   - public static void IsPermitted(NoodleAndroidPermission permission)
28   - {
29   - if (!initialized)
30   - initialize();
31   - noodlePermissionGranterClass.CallStatic("CheckPermission", activity, (int)permission);
32   -
33   - }
34   - public static void GrantPermission(NoodleAndroidPermission permission)
35   - {
36   - if (!initialized)
37   - initialize();
38   -
39   - noodlePermissionGranterClass.CallStatic("grantPermission", activity, (int)permission);
40   -
41   -
42   -
43   - }
44   -
45   - //////////////////////////////
46   - /// Initialization Stuff /////
47   - //////////////////////////////
48   -
49   - // it's a singleton, but no one needs to know about it. hush hush. dont touch me.
50   - private static NoodlePermissionGranter instance;
51   - private static bool initialized = false;
52   -
53   - public void Awake()
54   - {
55   - // instance is also set in initialize.
56   - // having it here ensures this thing doesnt break
57   - // if you added this component to the scene manually
58   - instance = this;
59   - DontDestroyOnLoad(this.gameObject);
60   - // object name must match UnitySendMessage call in NoodlePermissionGranter.java
61   - if (name != NOODLE_PERMISSION_GRANTER)
62   - name = NOODLE_PERMISSION_GRANTER;
63   - }
64   -
65   -
66   - private static void initialize()
67   - {
68   - // runs once when you call GrantPermission
69   -
70   - // add object to scene
71   - if (instance == null)
72   - {
73   - GameObject go = new GameObject();
74   - // instance will also be set in awake, but having it here as well seems extra safe
75   - instance = go.AddComponent<NoodlePermissionGranter>();
76   - // object name must match UnitySendMessage call in NoodlePermissionGranter.java
77   - go.name = NOODLE_PERMISSION_GRANTER;
78   - }
79   -
80   - // get the jni stuff. we need the activty class and the NoodlePermissionGranter class.
81   - noodlePermissionGranterClass = new AndroidJavaClass("com.vlibras.permissionplugin.NoodlePermissionGranter");
82   - AndroidJavaClass u3d = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
83   - activity = u3d.GetStatic<AndroidJavaObject>("currentActivity");
84   -
85   - initialized = true;
86   - }
87   -
88   -
89   -
90   -
91   -
92   -
93   -
94   - ///////////////////
95   - //// JNI Stuff ////
96   - ///////////////////
97   -
98   - static AndroidJavaClass noodlePermissionGranterClass;
99   - static AndroidJavaObject activity;
100   - private const string WRITE_EXTERNAL_STORAGE = "WRITE_EXTERNAL_STORAGE";
101   - private const string PERMISSION_GRANTED = "PERMISSION_GRANTED"; // must match NoodlePermissionGranter.java
102   - private const string PERMISSION_DENIED = "PERMISSION_DENIED"; // must match NoodlePermissionGranter.java
103   - private const string NOODLE_PERMISSION_GRANTER = "NoodlePermissionGranter"; // must match UnitySendMessage call in NoodlePermissionGranter.java
104   -
105   - private void permissionRequestCallbackInternal(string message)
106   - {
107   - // were calling this method from the java side.
108   - // the method name and gameobject must match NoodlePermissionGranter.java's UnitySendMessage
109   - bool permissionGranted = (message == PERMISSION_GRANTED);
110   - if (PermissionRequestCallback != null)
111   - PermissionRequestCallback(permissionGranted);
112   - }
113   -
114   - private void permittedActionCallBack(string message)
115   - {
116   - bool permissionGranted = (message == PERMISSION_GRANTED);
117   - if (PermittedAction != null)
118   - PermittedAction(permissionGranted);
119   - }
120   -
121   -
122   -}
123 0 \ No newline at end of file
Assets/Scripts/Export Video/AndroidPermission.cs.meta
... ... @@ -1,12 +0,0 @@
1   -fileFormatVersion: 2
2   -guid: a7fa4a3e85ddd024f98f4f9f78540b35
3   -timeCreated: 1487423780
4   -licenseType: Free
5   -MonoImporter:
6   - serializedVersion: 2
7   - defaultReferences: []
8   - executionOrder: 0
9   - icon: {instanceID: 0}
10   - userData:
11   - assetBundleName:
12   - assetBundleVariant:
Assets/Scripts/Export Video/AndroidToast.cs
... ... @@ -1,43 +0,0 @@
1   -/**********************
2   -********LAVID**********
3   -***VLibras Project*****
4   -*------------------------------------------------------------------------
5   -*Description:
6   -*This class is a Android Plugin that allows the creation of Toast
7   -* notifications.
8   -*---------------------------------------------------------------------------
9   -*Plugin directory:
10   -* - Assets/Plugins/Android
11   -*References:
12   -* - http://docs.unity3d.com/ScriptReference/AndroidJavaClass.html
13   -*------------------------------------------------------------------------
14   -*Author: Thiago Filipe
15   -*thiago.filipe@lavid.ufpb.br
16   -***********************/
17   -
18   -using UnityEngine;
19   -using System.Collections;
20   -
21   -public class AndroidToast
22   -{
23   - AndroidJavaObject currentActivity;
24   - AndroidJavaClass UnityPlayer;
25   - AndroidJavaObject context;
26   -
27   - public void showToast(string toastString,string lenght){
28   -
29   - if (Application.platform == RuntimePlatform.Android)
30   - {
31   - UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
32   - currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
33   - context = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
34   -
35   - AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
36   - AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", toastString);
37   - AndroidJavaObject toast = Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_" + lenght)); //Toast Duration Time
38   - toast.Call("show");
39   - }
40   - }
41   -
42   -
43   -}
Assets/Scripts/Export Video/AndroidToast.cs.meta
... ... @@ -1,12 +0,0 @@
1   -fileFormatVersion: 2
2   -guid: f4af3594fb207274dbd1d303e7079acb
3   -timeCreated: 1486225591
4   -licenseType: Free
5   -MonoImporter:
6   - serializedVersion: 2
7   - defaultReferences: []
8   - executionOrder: 0
9   - icon: {instanceID: 0}
10   - userData:
11   - assetBundleName:
12   - assetBundleVariant:
Assets/Scripts/Export Video/ExportVideo.cs
... ... @@ -28,9 +28,14 @@ using LAViD.Unity.Utils;
28 28  
29 29 public class ExportVideo : MonoBehaviour {
30 30  
  31 + /* Durante o código, estarão presentes alguns Toast Notifications, no caso, servem apenas para Android. Alguns desses Toasts são responsáveis
  32 + * apenas por notificar o usuário do ínicio de uma exportação de vídeo, ou do ínicio e fim de download. Outros, mais importantes, são responsá-
  33 + * veis por notificar o usuário de algum erro durante o processo. Caso exista algum equivalente do toast no iOS, usá-lo. Caso contrário,
  34 + * substituir apenas os toasts de erro por um alerta no iOS, onde o usuário deve clicar "OK".*/
  35 +
31 36  
32 37 public ScreenManager screenManager;
33   - public MediaShareAndroid MediaShareAndroid;
  38 + public MediaShareIOS MediaShareIOS;
34 39  
35 40 private const string SERVER_URL = "http://150.165.205.84:80/video";
36 41  
... ... @@ -69,28 +74,37 @@ public class ExportVideo : MonoBehaviour {
69 74 PlayerLogger.Log("ExportVideo", "SetGloss", "Setting current gloss to gloss property from ExportVideo");
70 75 gloss = _gloss;
71 76  
72   - }
73   -
  77 + }
74 78  
  79 +
  80 + /* RunTime Android Permission being asked*/
75 81 private void onClickExport()
76 82 {
77 83 PlayerLogger.Log("ExportVideo", "OnClickExport", "Starting Export...");
78 84  
  85 + /* Aqui é o começo do processo de Exportar vídeo. Antes do processo realmente começar, deve-se checar se o app tem permissões para escrever
  86 + * no aparelho. Deve-se então trocar essa parte do código por uma abordagem iOS. NÃO ESQUECER DO CALLBACK PERMITTED. Caso contrário não
  87 + * será direcionado para próxima etapa do processo.*/
  88 +
  89 +
  90 + /*
79 91 NoodlePermissionGranter.PermissionRequestCallback = Permitted;
80 92 NoodlePermissionGranter.GrantPermission(NoodlePermissionGranter.NoodleAndroidPermission.WRITE_EXTERNAL_STORAGE);
81   -
  93 + */
82 94  
83 95  
84 96 }
85 97  
86 98  
87   - /* RunTime Android Permission being asked*/
  99 +
88 100 private void Permitted(bool PermissionGranted)
89 101 {
90 102 if (PermissionGranted)
91 103 {
92 104 int fiveTimesCount;
93 105  
  106 + /* Making the app shows the dialog for the user every five times.*/
  107 +
94 108 if (PlayerPrefs.HasKey("fiveTimesCount"))
95 109 {
96 110 fiveTimesCount = PlayerPrefs.GetInt("fiveTimesCount");
... ... @@ -137,7 +151,7 @@ public class ExportVideo : MonoBehaviour {
137 151 else
138 152 {
139 153 screenManager.showPermissionDialog("Para salvar e compartilhar as animações, permita que o Vlibras acesse mídia e arquivos de seu aparelho.", "Exportar Vìdeo");
140   - // new AndroidToast().showToast("Você precisa dá permissão ao aplicativo.", "LONG");
  154 +
141 155 }
142 156  
143 157  
... ... @@ -208,7 +222,8 @@ public class ExportVideo : MonoBehaviour {
208 222 {
209 223 if (result == MNDialogResult.YES)
210 224 {
211   - new AndroidToast().showToast("Download iniciado.", "SHORT");
  225 +
  226 + /* new AndroidToast().showToast("Download iniciado.", "SHORT");*/
212 227 PlayerLogger.Log("ExportVideo", "OnDownloadClick", "Starting Video Download...");
213 228 StartCoroutine("videoDownload");
214 229 screenManager.changeExportStates(ExportLayers.ExportLayer.Download_Layer, false);
... ... @@ -264,15 +279,17 @@ public class ExportVideo : MonoBehaviour {
264 279 Action errorAction = () =>
265 280 {
266 281 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
267   - new AndroidToast().showToast("Erro ao compartilhar mídia.", "LONG");
  282 + /*new AndroidToast().showToast("Erro ao compartilhar mídia.", "LONG");*/
268 283 };
269 284  
270   - StartCoroutine(MediaShareAndroid.ShareIntent(errorAction));
  285 + /*Essa chamada é a que compartilha o video baixado, criando a intent. Achar equivalente no iOS. NÃO ESQUECER DO
  286 + * CALLBACK "errorAction", o qual é chamado quando não se pode compartilhar o vídeo.*/
  287 + StartCoroutine(MediaShareIOS.ShareIntent(errorAction));
271 288 }
272 289  
273 290 else
274 291 {
275   - new AndroidToast().showToast("Erro ao compartilhar mídia.", "LONG");
  292 + /*new AndroidToast().showToast("Erro ao compartilhar mídia.", "LONG");*/
276 293 screenManager.changeExportStates(ExportLayers.ExportLayer.All, true);
277 294 }
278 295  
... ... @@ -498,10 +515,13 @@ public class ExportVideo : MonoBehaviour {
498 515 {
499 516 bytes = DownloadVideo.bytesDownloaded;
500 517 videoContent = DownloadVideo.bytes;
501   - Action callBack = () => { OnDownloadFinished(); new AndroidToast().showToast("Vídeo salvo na Galeria.", "SHORT"); };
  518 + Action sucessWriting = () => { OnDownloadFinished(); /* new AndroidToast().showToast("Vídeo salvo na Galeria.", "SHORT");*/ };
502 519 Action errorWriting = () => { screenManager.changeExportStates(ExportLayers.ExportLayer.All, true); };
503 520 videoDownloadRunning = false;
504   - StartCoroutine(MediaShareAndroid.WriteOnAndroid(videoContent, bytes, System.DateTime.Now.ToString("dd_MM_yyyy_HH_mm_ss"), callBack, errorWriting));
  521 +
  522 + /* Essa chamada é responsável por escrever os dados baixados do vídeo no aparelho, para que então ele esteja dispónivel para copartilhamento.
  523 + * NÃO ESQUECER DOS CALLBACKS "sucessWriting" e "errorWriting"*/
  524 + StartCoroutine(MediaShareIOS.WriteOnIOS(videoContent, bytes, System.DateTime.Now.ToString("dd_MM_yyyy_HH_mm_ss"), sucessWriting, errorWriting));
505 525  
506 526 }
507 527 else
... ... @@ -545,19 +565,19 @@ public class ExportVideo : MonoBehaviour {
545 565 switch (error)
546 566 {
547 567 case ExportLayers.ConnectionStatusError.CONNECTION_TIMEOUT_FAILURE:
548   - new AndroidToast().showToast("Erro de conexão. Tente novamente.", "LONG");
  568 + /*new AndroidToast().showToast("Erro de conexão. Tente novamente.", "LONG");*/
549 569 break;
550 570 case ExportLayers.ConnectionStatusError.DOWNLOAD_CONNECTION_FAILURE:
551   - new AndroidToast().showToast("Erro ao efetuar download, tente novamente.", "LONG");
  571 + /* new AndroidToast().showToast("Erro ao efetuar download, tente novamente.", "LONG");*/
552 572 break;
553 573 case ExportLayers.ConnectionStatusError.INTERNET_CONNECTION_FAILURE:
554   - new AndroidToast().showToast("Não há acesso à internet. Verifique sua conexão", "LONG");
  574 + /* new AndroidToast().showToast("Não há acesso à internet. Verifique sua conexão", "LONG");*/
555 575 break;
556 576 case ExportLayers.ConnectionStatusError.ERROR_CONNECTION_FAILURE:
557   - new AndroidToast().showToast("Problema na conexão. Aguarde e tente novamente.", "LONG");
  577 + /* new AndroidToast().showToast("Problema na conexão. Aguarde e tente novamente.", "LONG");*/
558 578 break;
559 579 default:
560   - new AndroidToast().showToast("Ocorreu um erro. Estamos trabalhando para solucioná-lo!", "LONG");
  580 + /*new AndroidToast().showToast("Ocorreu um erro. Estamos trabalhando para solucioná-lo!", "LONG");*/
561 581 break;
562 582 }
563 583  
... ...
Assets/Scripts/Export Video/MediaShareAndroid.cs
... ... @@ -1,167 +0,0 @@
1   -/**********************
2   -********LAVID**********
3   -***VLibras Project*****
4   -*------------------------------------------------------------------------
5   -*Description:
6   -*
7   -*This class is a Android Plugin that makes available the sharing function.
8   -*---------------------------------------------------------------------------
9   -*Plugin directory:
10   -* - Assets/Plugins/Android
11   -*References:
12   -* - http://docs.unity3d.com/ScriptReference/AndroidJavaClass.html
13   -*------------------------------------------------------------------------
14   -*Author: Thiago Filipe
15   -*thiago.filipe@lavid.ufpb.br
16   -***********************/
17   -using UnityEngine;
18   -using System.Collections;
19   -using System.IO;
20   -using System;
21   -using LAViD.Unity.Utils;
22   -
23   -
24   -
25   -public class MediaShareAndroid : MonoBehaviour
26   -{
27   -
28   - private string MediaType = "video/*";
29   -
30   - private string SubtitleMessage = "VLibras na Playstore - https://play.google.com/store/apps/details?id=com.lavid.vlibrasdroid&hl=pt_BR";
31   -
32   - private string AndroidPath;
33   -
34   - private static string destination = "";
35   - private string Vlibras = "DCIM/VLibras";
36   - private string Filen = "VLibrasVideo_";
37   - private static string FilePath = "";
38   -
39   - private byte[] videoContent;
40   - private int bytes;
41   -
42   - private void Awake()
43   - {
44   - AndroidPath = AndroidJavaUti.CurrentSDCardPath;
45   - }
46   -
47   -
48   - /*Makes sure that Vlibras Folder gets created and write the video bytes in it.*/
49   -
50   - public IEnumerator WriteOnAndroid(byte[] videoContent, int bytes,string CurrentTime, Action finishWriting, Action errorWriting)
51   - {
52   - if (Application.platform == RuntimePlatform.Android)
53   - {
54   -
55   - FilePath = Filen + CurrentTime + ".mp4";
56   - destination = Path.Combine(AndroidPath, Vlibras);
57   -
58   -
59   - /* Checking if folder Vlibras exists*/
60   -
61   - DirectoryInfo dir = new DirectoryInfo(destination);
62   - if (!dir.Exists)
63   - {
64   - dir.Create();
65   - }
66   -
67   - try
68   - {
69   - FileStream SourceStream = new FileStream(Path.Combine(destination, FilePath), FileMode.OpenOrCreate);
70   - if (SourceStream.CanWrite)
71   - {
72   - SourceStream.Write(videoContent, 0, bytes);
73   - SourceStream.Close();
74   -
75   - Refresh(FilePath);
76   - finishWriting();
77   - yield break;
78   -
79   - }
80   - else
81   - {
82   - new AndroidToast().showToast("Erro ao salvar vídeo.", "LONG");
83   - errorWriting();
84   - }
85   -
86   -
87   - }
88   - catch (Exception e)
89   - {
90   - PlayerLogger.Log("MediaShareAndroid", "WriteOnAndroid", "Message: " + e.Message);
91   - PlayerLogger.Log("MediaShareAndroid", "WriteOnAndroid", "Message: " + e.StackTrace);
92   - new AndroidToast().showToast("Você precisa dá permissão ao aplicativo", "LONG");
93   - errorWriting();
94   - }
95   -
96   -
97   -
98   - }
99   -
100   -
101   -
102   -
103   - }
104   -
105   - /* Calling Android Services to refresh the video path, making available to show in gallery*/
106   -
107   - private void Refresh(string FilePath)
108   - {
109   - if (Application.platform == RuntimePlatform.Android)
110   - {
111   -
112   - AndroidJavaClass jcUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
113   - AndroidJavaObject joActivity = jcUnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
114   - AndroidJavaObject joContext = joActivity.Call<AndroidJavaObject>("getApplicationContext");
115   - AndroidJavaClass jcMediaScannerConnection = new AndroidJavaClass("android.media.MediaScannerConnection");
116   - //AndroidJavaClass jcEnvironment = new AndroidJavaClass("android.os.Environment");
117   - // AndroidJavaObject joExDir = jcEnvironment.CallStatic<AndroidJavaObject>("getExternalStorageDirectory");
118   - string path = destination;
119   - jcMediaScannerConnection.CallStatic("scanFile", joContext, new string[] { path }, new string[] { "video/mp4" }, null);
120   -
121   -
122   - }
123   - }
124   -
125   -
126   - /* Calling Android Services to create Share Intent*/
127   -
128   - public IEnumerator ShareIntent(Action errorAction) {
129   -
130   - if (Application.platform == RuntimePlatform.Android)
131   - {
132   - if (File.Exists(Path.Combine(destination, FilePath)))
133   - {
134   -
135   - // block to open the file and share it ------------START
136   - AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
137   - AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
138   - intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
139   -
140   - AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
141   - AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + Path.Combine(destination, FilePath));
142   -
143   - intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
144   - intentObject.Call<AndroidJavaObject>("setType", MediaType);
145   -
146   - //add data to be passed to the other activity i.e., the data to be sent
147   - intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), "VLibras");
148   - intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), SubtitleMessage);
149   - intentObject.Call<AndroidJavaObject>("setType", "video/*");
150   - AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
151   - AndroidJavaObject jChooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, "Compartilhar via");
152   - AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
153   - currentActivity.Call("startActivity", jChooser);
154   - yield break;
155   - }
156   - else
157   - {
158   - errorAction();
159   -
160   - yield break;
161   - }
162   - }
163   - }
164   -
165   -}
166   -
167   -
Assets/Scripts/Export Video/MediaShareAndroid.cs.meta
... ... @@ -1,12 +0,0 @@
1   -fileFormatVersion: 2
2   -guid: fd1b12a178cf08b4284859e93194c7a4
3   -timeCreated: 1485791307
4   -licenseType: Free
5   -MonoImporter:
6   - serializedVersion: 2
7   - defaultReferences: []
8   - executionOrder: 0
9   - icon: {instanceID: 0}
10   - userData:
11   - assetBundleName:
12   - assetBundleVariant:
Assets/Scripts/Export Video/MediaShareIOS.cs 0 → 100644
... ... @@ -0,0 +1,65 @@
  1 +/**********************
  2 +********LAVID**********
  3 +***VLibras Project*****
  4 +*------------------------------------------------------------------------
  5 +*Description:
  6 +*
  7 +*This class is a Android Plugin that makes available the sharing function.
  8 +*---------------------------------------------------------------------------
  9 +*Plugin directory:
  10 +* - Assets/Plugins/Android
  11 +*References:
  12 +* - http://docs.unity3d.com/ScriptReference/AndroidJavaClass.html
  13 +*------------------------------------------------------------------------
  14 +*Author: Thiago Filipe
  15 +*thiago.filipe@lavid.ufpb.br
  16 +***********************/
  17 +using UnityEngine;
  18 +using System.Collections;
  19 +using System;
  20 +using LAViD.Unity.Utils;
  21 +
  22 +
  23 +
  24 +public class MediaShareIOS : MonoBehaviour
  25 +{
  26 +
  27 + private string MediaType = "video/*";
  28 + private static string destination = "";
  29 + private string VlibrasFolder = "DCIM/VLibras";
  30 + private string Filen = "VLibrasVideo_";
  31 + private static string FilePath = "";
  32 +
  33 +
  34 + /*Makes sure that Vlibras Folder gets created and write the video bytes in it.*/
  35 +
  36 + public IEnumerator WriteOnIOS(byte[] videoContent, int bytes,string CurrentTime, Action finishWriting, Action errorWriting)
  37 + {
  38 + /*FilePath se refere ao nome que o arquivo será salvo. Este deve ser mantido como está.*/
  39 + FilePath = Filen + CurrentTime + ".mp4";
  40 +
  41 + /* A partir daqui deve ser feita a implementação IOS, onde deve-se utilizar dos callbacks "finishWriting" e "errorWriting". O primeiro
  42 + * chamado em caso de sucesso na escrita do vídeo, o segundo em caso de algum erro.*/
  43 + /*É necessário que o arquivo seja salvo numa pasta própria do Vlibras de maneira que o usuário iOS possa visualizar o vídeo na galeria*/
  44 +
  45 +
  46 + yield break;
  47 +
  48 + }
  49 +
  50 +
  51 +
  52 + /* Calling Android Services to create Share Intent*/
  53 +
  54 + public IEnumerator ShareIntent(Action errorAction) {
  55 +
  56 + /* Aqui deve ser feita a implementação iOS da função que permitirá o usuário compartilhar o vídeo com as redes sociais*/
  57 + /*O callback errorAction deve ser chamado em caso de algum erro no processo, por exemplo: usuário baixou o vídeo e foi salvo
  58 + * corretamente, porém antes de clicar compartilhar, ele foi no diretório do vídeo e o excluiu, para então clicar compartilhar.*/
  59 +
  60 + yield break;
  61 + }
  62 +
  63 +}
  64 +
  65 +
... ...
Assets/Scripts/Export Video/MediaShareIOS.cs.meta 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +fileFormatVersion: 2
  2 +guid: ff208f584beb2bd43a9751619a94e506
  3 +timeCreated: 1489757228
  4 +licenseType: Free
  5 +MonoImporter:
  6 + serializedVersion: 2
  7 + defaultReferences: []
  8 + executionOrder: 0
  9 + icon: {instanceID: 0}
  10 + userData:
  11 + assetBundleName:
  12 + assetBundleVariant:
... ...
ProjectSettings/ProjectSettings.asset
... ... @@ -114,12 +114,12 @@ PlayerSettings:
114 114 ForceSDCardPermission: 1
115 115 CreateWallpaper: 0
116 116 APKExpansionFiles: 0
117   - preloadShaders: 0
  117 + preloadShaders: 1
118 118 StripUnusedMeshComponents: 0
119 119 VertexChannelCompressionMask:
120 120 serializedVersion: 2
121 121 m_Bits: 238
122   - iPhoneSdkVersion: 988
  122 + iPhoneSdkVersion: 989
123 123 iPhoneTargetOSVersion: 22
124 124 tvOSSdkVersion: 0
125 125 tvOSTargetOSVersion: 900
... ...