Unity 调用activity及其布局方法 如果 仅仅是调用android里面的方法 不涉及到布局,仅需要导出相关的Jar包就可以,但是如果我想调用android的activity以及相关的布局,仅仅导出Jar是不够的。如果我们想android布局和unity布局混杂使用,设想一个需求,用户需要在Unity渲染图片,而图片列表和选择需要在android里面做,然后将选中的路径传递给unity。 按照此需求 进行说明:前提是按照常规的jar的方法,将unity下的android的 class复制到android下。 1. 首先完成Unity场景 ChoiceScene,此场景添加两个button,视频选择,图片选择。 2. 每当点击这两个按钮,调用android 里面的方法: public static void StartPanoramaActivity(Context context) { Intent intent = new Intent(context, PanoramaImageListActivity.class); context.startActivity(intent); } public static void StartLocalVideoActivity(Context context) { Intent intent = new Intent(context, FullViewVideoListActivity.class); context.startActivity(intent); } 通过代码我们可以看到 这是启动两个android 下的activity,上述两个方法 放在CommonUtil这个静态类下面,unity调用 : public static void StartPanoramaActivity() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaClass CommonUtil = new AndroidJavaClass("com.goertek.play360.CommonUtil"); CommonUtil.CallStatic("StartPanoramaActivity", jo); } public static void StartLocalVideoActivity() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaClass CommonUtil = new AndroidJavaClass("com.goertek.play360.CommonUtil"); CommonUtil.CallStatic("StartLocalVideoActivity", jo); } 这里和普通jar包没有区别,但是如果你仅仅通过jar包方式调用的话,当点击按钮的时候程序崩溃,因为在activy里面listview=(ListView) findViewById(R.id.list); listview.setAdapter(mImageListAdapter); 这时候说对象为空,如果仅仅运行android的程序,完全是正常的。这时候把res 也复制到unity里面,这个问题就解决了,但是找不到R.layout.这个时候我在生成jar包的时候把res和gen都选,又报错。或者我直接把bin直接导成jar,因为bin下面包含了res和class,可是还没有解决。也就是说 通过export 导出jar,在导出的时候 选择不同的选项 或者全选都通不过。 3. 我经过测试 通过的方法是:将程序 android 属性中IsLibrary 打勾,然后clean(不clean没测试过,这是我的习惯),然后run,这个时候就会在bin下面生成一个jar,我觉得这个方法,比我们自己导要好一些,毕竟是系统做的,然后将gen和res,jar包同时放到unity android中。测试通过。 4. 这里最好每次生成新jar的时候,将新的gen也换掉,我没有测试过没换的情况,如果你仅仅添加方法,而没有增删布局。 5. 这里还发现一个问题 unity下manifest.xml: <activity android:name="com.google.unity.GoogleUnityActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="com.google.intent.category.CARDBOARD" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> Android manifest: <activity android:name="com.goertek.play360.MainActivity" android:screenOrientation="portrait" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> MainActivity 也是继承了UnityActivity,我并没有将android下的此xml复制到unity下,仅仅将unity需要启动的两个activity添加到unity下的xml,这个时候程序一样运行,即使我在unityxml里面没有添加 android:name="com.goertek.play360.MainActivity",这个还是优先于GoogleUnityActivity启动,GoogleUnityActivity没有启动。所以android 下的xml没有必要和unity一致,仅仅需要将用到的权限,启动的activity等加入即可,通过上面可以观察到unity自己会去寻找启动相关的UnityActivity。 如果在android 使用 UnityPlayer.UnitySendMessage("Sphere360", "RefreshParanaFilePath", imagePath); 他是告诉一个场景下叫Sphere360的对象,去执行RefreshParanaFilePath这个方法,但是即使我这个场景编辑到了unity运行环境中,但是没有运行过,那么就接收不到android传来的信息。这点类似于android的动态广播机制,不执行不接收。
附件和上面的一样,没有测试代码,因为我是在实际工程中测试的
相关推荐
通常,你需要重写onCreate方法,设置SurfaceHolder.Callback,并在surfaceCreated、surfaceChanged和surfaceDestroyed方法中调用UnityPlayer的相关函数: ```java UnityPlayer.init(); UnityPlayer.setActivity...
- `UnityPlayerActivity`: 这是Unity3D游戏在Android上的主Activity,负责游戏的启动和管理。它继承自UnityPlayerNativeActivity,处理游戏的生命周期事件。 - `UnityPlayer`: Unity3D在Android上的核心组件,负责...
例如,你可以使用`SYSTEM_UI_FLAG_FULLSCREEN`标志隐藏状态栏,然后使用`SYSTEM_UI_FLAG_LAYOUT_STABLE`和`SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION`来确保内容布局时不被状态栏遮挡。 在压缩包中的`AppStatusBar`...
在这个Activity中,你需要调用Android和Unity3d的通信接口,实现展示广告的方法。例如,在MainActivity中创建一个ZhuamobLayout对象,设置广告布局参数,并在onCreate方法中添加广告视图。 ```java public class ...
完成这些设置后,Android Studio会自动生成一个基本的"Hello World"应用,包括一个名为`MainActivity`的Activity和一个布局文件`activity_main.xml`。 `MainActivity`是应用的入口点,通常包含一个`onCreate`方法,...
10. **布局和样式**:在XML布局文件中,可以将自定义的GIFView作为普通视图添加,设置其大小、位置和其他属性,以适应界面设计。 综上所述,“TestGIFDemo”项目通过自定义View和使用第三方库,展示了如何在Android...
例如,如果Unity应用需要使用Fragment或实现Material Design风格,就需要添加`android-support-v4.jar`和`android-support-v7-appcompat.jar`到项目中,并在Unity的Java插件部分进行相应的调用。 总结来说,`...
然后在Activity的onCreate()方法中加载这个布局,并在适当的时机(如数据加载完成或界面准备就绪)调用startActivity()方法切换到主应用界面。 对于iOS开发者,可以使用Storyboard或XIB文件创建闪屏视图,然后在...
当你需要在辅助显示器上显示内容时,例如在特定活动(Activity)中,创建`CustomPresentation`的实例,并调用`show()`方法。 ```java if (display != null) { CustomPresentation presentation = new ...
5. **UI设计**:为了提供良好的用户体验,项目中可能还包括了界面布局和样式的设计。 ZXing库的强大之处在于它的灵活性和稳定性,无论是简单的扫描需求还是复杂的集成场景,都能很好地应对。开发者可以通过ZXing...
你需要了解如何安装、配置和使用它,包括创建新项目、设置活动(Activity)、布局文件等。 2. **XML布局设计**:在Android中,UI界面通常是用XML来设计的。学习如何使用LinearLayout、RelativeLayout、...
1. 创建Fragment类:为每个页面创建一个Fragment类,实现其中的UI布局和逻辑。 2. 实现Adapter:继承`FragmentPagerAdapter`,并覆写`getItem()`方法来返回对应位置的Fragment实例,以及`getCount()`方法来返回...
4. 初始化和配置`ZrcListView`:在Activity或Fragment的onCreate方法中,找到对应的ListView或GridView实例,然后调用`ZrcListView`的初始化方法并传入自定义的刷新视图和回调接口。 5. 使用`ZrcListView`:在数据...
- **生命周期**:理解Activity的生命周期,如`onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`等方法的作用和调用时机。 2. **游戏功能实现**: - **拼图逻辑**:使用编程逻辑...
当Unity调用Android的API来安装APK时,特别是在Android 8.0(API级别26)及以上版本,会遇到权限问题。从Android 6.0(API级别23)开始,系统引入了运行时权限管理,这意味着应用在运行时需要请求一些敏感权限,而...
例如,在Activity的布局文件中添加广告视图,或者在代码中调用显示广告的方法。 广告去除的第一步是定位源码中与广告相关的类和文件。这可能包括XML布局文件中的广告视图(如AdView或InterstitialAd),以及Java或...
6. **在布局中使用**:在Activity或Fragment的布局XML文件中,引入自定义控件,并设置属性。例如: ```xml android:id="@+id/my_progress_dialog" android:layout_width="wrap_content" android:layout_height...
- `onActivityCreated()`:在Activity的`onCreate()`方法完成后调用,可以在这里初始化Fragment内的UI元素和进行业务逻辑处理。 - `onDestroyView()`:当Fragment的视图即将被销毁时调用。 - `onStart()`和`...
在提供的资源文件`CardView-master`中,可能包含了完整的示例代码,包括卡片布局、Activity代码以及动画实现,你可以通过阅读和理解这些代码来进一步学习和实践3D卡片滑动效果。 总的来说,实现Android的3D卡片滑动...