相关疑难解决方法(0)

使用Java反射更改私有静态final字段

我有一个带有private static final字段的类,不幸的是,我需要在运行时更改.

使用反射我得到这个错误: java.lang.IllegalAccessException: Can not set static final boolean field

有没有办法改变价值?

Field hack = WarpTransform2D.class.getDeclaredField("USE_HACK");
hack.setAccessible(true);
hack.set(null, true);
Run Code Online (Sandbox Code Playgroud)

java reflection static final private

454
推荐指数
8
解决办法
22万
查看次数

某些应用程序如何克服电话录制限制?

背景

Android上并不支持手机录音,但有些设备在某种程度上支持它.

这使得各种呼叫录制应用收集了关于设备的可能信息以及应该对它们做什么,并决定该做什么.

有些甚至提供根解决方案.

一个这样的例子是boldbeast Call Recorder应用程序,它提供了许多不同的配置来改变:

在此输入图像描述

  • "记录模式".显示非root用户设备的14种模式,root用户最多34种模式.对于root设备,还显示"Alsa mode"作为它的选项.

  • 具有"调谐音频效果"("自动调整一组参数").

  • 具有"调谐音频路由",可能的值为"已禁用","组1","组2","组3"

  • 对于有根设备:

    • "更改音频控件"("自动更改音频控件")

    • "更改音频驱动程序"(更改音频驱动器设置以启用记录模式21,22,23,24,31,32,33,34")

    • 对于有根设备:"开始输入流"

问题

如果我需要创建一个呼叫录制应用程序,除了找到各种设备的各种解决方法之外别无他法,但似乎其他应用程序使用API​​中没有出现的术语.

例如,我找不到我提到的任何应用程序中的任何一个.

我发现了什么

除了大量关于如何在Android上录制电话的问题,显示它不适用于所有设备,我可以找到一些有趣的东西.以下是我到目前为止的尝试和见解:

  • 我们可以在准备录音时使用一些录音源(这里是文档),但遗憾的是在每个设备中它可能会有所不同.对于一些人来说,VOICE_CALL是有效的,对某些人来说也是如此.但至少我们可以尝试......

  • 在安装了Android 6.0.1的OnePlus 2上,可以使用VOICE_CALL录制来电,但是我无法在那里录制拨出电话,除非我将MIC作为音频源与扬声器开启一起使用.不知何故,我提到的应用程序成功录制它没有任何问题.我相信我会看到其他Android设备的其他问题,因为我过去曾试图解决这个问题.更新:我发现了这个示例项目(也在这里),由于某种原因,它在UI线程preparestartmediaRecorder调用之间休眠2秒.它工作正常,当我做类似的事情(等待使用Handler.postDelayed 1秒),它也工作得很好.在那里写的评论是"有时准备需要一些时间才能完成".

  • 在使用Android 8的Galaxy S7上,无论我做了什么,我都无法获得传出呼叫和来电(即使是MIC和扬声器)的另一方声音,但我提到的应用程序运行正常.

  • 为了让你尝尝我的通话录音的POC,我已经发表了开放源代码的github仓库在这里,有一个样品,将记录一个电话,让你聆听到最新的一个,如果一切运作良好.

  • 这个"ViktorDegtyarev - CallRecLib"SDK似乎根本不起作用,并在各种Android版本上崩溃

  • 这两个旧的示例项目:rvoix,esnyder-callrecorder,都无法实际记录.第二个似乎甚至不适用于它应该支持的Android 6.0.1设备.

  • aykuttasil - CallRecorder示例和 axet - android-call-recorder示例 - 两者,就像在我的POC上一样,除了AudioSource之外没有任何调整,因此他们无法记录某些情况,例如OnePlus 2输出 -拨出电话的音频.

  • 大多数第三方应用程序仅提供AudioSource调整,但有些(如"boldbeast")确实提供更多.一个例子是" 自动呼叫记录器 ",其具有"配置"(10个值可供选择,首先是"默认")和"方法"(5个值可供选择,首先是"默认").这些应用程序可能不希望其他人理解这些配置的含义,因此他们会使用通用名称.或者,它对每个人来说都太复杂了(特别是对于用户而言),所以他们概括了名称.

  • 有"setMode"的API 在这里,但它似乎并不在调用它改变.我想也许可以通过这种方式改变呼叫使用位置的"通道",但它不起作用.它在调用期间保持为"2"的值,即MODE_IN_CALL.

  • 有各种设​​备可用的自定义参数(每个OEM及其自己的参数),这些参数可以在这里设置,甚至可以通过JNI( …

audio android call-recording

38
推荐指数
1
解决办法
3512
查看次数

在 POST/PUT 期间将所有对象作为其 id 或嵌入整个对象的单个自定义反序列化器

@Entity
public Product {
   @Id
   public int id;

   public String name;

   @ManyToOne(cascade = {CascadeType.DETACH} )
   Category category

   @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH} )
   Set<Category> secondaryCategories;


}
Run Code Online (Sandbox Code Playgroud)

和这个实体:

@Entity
public Category {
   @Id
   public int id;

   public String name;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用 json 发送 POST

{ name: "name", category: 2, secondaryCategories: [3,4,5] }从客户端

并且能够像这样反序列化:

{ name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }
Run Code Online (Sandbox Code Playgroud)

如果它被发送为

 { name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, …
Run Code Online (Sandbox Code Playgroud)

spring json jackson spring-data spring-data-jpa

5
推荐指数
1
解决办法
2923
查看次数