Unity 调用 Android Native 方法(一) 获得Android系统音量

学习雷锋,好榜样,接下来的这一系类教程里,将通过unity来实现Android端的一些常用功能,

不需要在 Asset/Plugins/Android 目录下引用jar包或者aar包,这是重点。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4
 5 public class Volume : MonoBehaviour {
 6
 7
 8     private const string currentVolume = "getStreamVolume";//当前音量
 9     private const string maxVolume = "getStreamMaxVolume";//最大音量
10
11     private const int STREAM_VOICE_CALL = 0;
12     private const int STREAM_SYSTEM = 1;
13     private const int STREAM_RING = 2;
14     private const int STREAM_MUSIC = 3;
15     private const int STREAM_ALARM = 4;
16     private const int STREAM_NOTIFICATION = 5;
17      const int STREAM_DTMF = 8;
18
19     //创建几个 "3D Text" 用于接收音量值
20     public  TextMesh STREAM_VOICE_CALL_Text;
21     public  TextMesh STREAM_SYSTEM_Text;
22     public  TextMesh STREAM_RING_Text;
23     public  TextMesh STREAM_MUSIC_Text;
24     public  TextMesh STREAM_ALARM_Text;
25     public  TextMesh STREAM_NOTIFICATION_Text;
26     public  TextMesh STREAM_DTMF_Text;
27
28
29     private static AndroidJavaObject audioManager;
30
31
32     void Awake()
33     {
34         AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
35         AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
36         audioManager = currentActivity.Call<AndroidJavaObject>("getSystemService", new AndroidJavaObject("java.lang.String", "audio"));
37     }
38     void Update()
39     {
40 //        //current volume value
41 //        STREAM_VOICE_CALL_Text.text = audioManager.Call<int> (currentVolume, STREAM_VOICE_CALL).ToString ();
42 //        STREAM_SYSTEM_Text.text = audioManager.Call<int> (currentVolume, STREAM_SYSTEM).ToString ();
43 //        STREAM_RING_Text.text = audioManager.Call<int> (currentVolume, STREAM_RING).ToString ();
44 //        STREAM_MUSIC_Text.text = audioManager.Call<int> (currentVolume, STREAM_MUSIC).ToString ();
45 //        STREAM_ALARM_Text.text = audioManager.Call<int> (currentVolume, STREAM_ALARM).ToString ();
46 //        STREAM_NOTIFICATION_Text.text = audioManager.Call<int> (currentVolume, STREAM_NOTIFICATION).ToString ();
47 //        STREAM_DTMF_Text.text = audioManager.Call<int> (currentVolume, STREAM_DTMF).ToString ();
48
49         //Max volume value
50         STREAM_VOICE_CALL_Text.text = audioManager.Call<int> (maxVolume, STREAM_VOICE_CALL).ToString ();
51         STREAM_SYSTEM_Text.text = audioManager.Call<int> (maxVolume, STREAM_SYSTEM).ToString ();
52         STREAM_RING_Text.text = audioManager.Call<int> (maxVolume, STREAM_RING).ToString ();
53         STREAM_MUSIC_Text.text = audioManager.Call<int> (maxVolume, STREAM_MUSIC).ToString ();
54         STREAM_ALARM_Text.text = audioManager.Call<int> (maxVolume, STREAM_ALARM).ToString ();
55         STREAM_NOTIFICATION_Text.text = audioManager.Call<int> (maxVolume, STREAM_NOTIFICATION).ToString ();
56         STREAM_DTMF_Text.text = audioManager.Call<int> (maxVolume, STREAM_DTMF).ToString ();
57
58     }
59 }
时间: 2024-10-19 04:43:04

Unity 调用 Android Native 方法(一) 获得Android系统音量的相关文章

Unity调用原生(iOS, Android)方法

Unity调用原生程序方法,定义接口(doTestSelector): using UnityEngine; using System.Collections; using System.Runtime.InteropServices; public class TestScript : MonoBehaviour { // This tells unity to look up the function FooPluginFunction // inside the static binary

Android Native jni 编程入门

在某些情况下,java编程已经不能满足我们的需要,比如一个复杂的算法处理,这时候就需要用到jni(java native interface)技术: jni 其实就是java和c/cpp之间进行通信的一个接口规范,java可以调用c/cpp里面的函数,同样,c/cpp也可以调用java类的方法: jni开发工具ndk的安装:在最新的ndk版本中,安装ndk很简单,只需要装ndk的路径配置到系统环境变量中即可:在编译的时候,进入工程根目录:执行命令  ndk-build  即可完成编译: 下面就通

【转贴】-- Android Native jni 编程入门

原帖地址:http://www.cnblogs.com/a284628487/p/4318698.html 在某些情况下,java编程已经不能满足我们的需要,比如一个复杂的算法处理,这时候就需要用到jni(java native interface)技术: jni 其实就是java和c/cpp之间进行通信的一个接口规范,java可以调用c/cpp里面的函数,同样,c/cpp也可以调用java类的方法: jni开发工具ndk的安装:在最新的ndk版本中,安装ndk很简单,只需要装ndk的路径配置到

JNI/NDK开发指南(二)——JVM查找java native方法的规则

通过第一篇文章,大家明白了调用native方法之前,首先要调用System.loadLibrary接口加载一个实现了native方法的动态库才能正常访问,否则就会抛出java.lang.UnsatisfiedLinkError异常,找不到XX方法的提示.现在我们想想,在Java中调用某个native方法时,JVM是通过什么方式,能正确的找到动态库中C/C++实现的那个native函数呢? JVM查找native方法有两种方式: 1> 按照JNI规范的命名规则 2> 调用JNI提供的Regist

Unity调用Android配置方法

方法一:发布eclipse android工程(如图勾选),如同IOS发布xcode一样,在eclipse中编写调用 方法二: 操作过程配置要点: 1.新建Android工程,注意包路径比如我的是com.zx,其他步骤直接下一步完成 2.勾选Mark this project as a library 3.新建Android工程编写相关接口方法后,复制bin文件(只需要zx.jar).res资源包.AndroidMainfest.xml配置文件 4.复制到Unity工程中Plugins/Andr

android native HAL程序 java程序 linux kernel打印调用栈的方法

android native HAL程序 java程序 linux kernel打印调用栈的方法 关于android java打出调用栈的方法 1)方法一:refs:frameworks/base/services/java/com/android/server/ActivityManagerService.javastartProcessLocked(){Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "amProcessStart&quo

JNI学习2:android 调用C语言方法与C语言调用android方法

#include <jni.h> #include <stdio.h> #include <stdlib.h> #include <jni.h> #include <android/log.h> #define LOG_TAG "System.out" //日志乱码时请将项目文件编码设置为UTF-8 /**debug级别日志:ANDROID_LOG_DEBUG:级别,LOG_TAG:标签,__VA_ARGS__:日志内容)**

使用SourceInsight查看android中的native方法

SourceInsight真的是查看源代码的神器.只要知道了文件名,就可以快速定位到文件.最近在研究Android的touch系统,发现MotionEvent的getX()方法调用的是nativeGexAxis(),于是想看看该本地代码是如何实现的,但我不知道nativeGexAxis的实现代码在什么位置.Android中的类调用本地代码是通过类名相似或Android.mk文件定义.MotionEvent所在的pack为android.view,将点号换成下划线,我们可以推测MotionEven

Android各种获取代码调用栈的方法[补]

打印调用栈不用说,基本上每位开发者都会用到,讨论几个方法,以前也说过,http://blog.csdn.net/freshui/article/details/9456889 再次简单整理一下吧,啰嗦就啰嗦了 :) 基本分两大类,一类是静态的,要把打印语句插入到代码中,一类是动态的,需要看的时候,查看一下,实时观测各线程调用栈情况. 静态方法 1. Java中打印调用栈 比较简单,利用Throwable,直接log中打印出来: [java] view plain copy Log.d(TAG,