小编Sir*_*get的帖子

在Android自定义ROM中修改通话中语音播放

我想修改Android OS(AOSP的官方图片),为正常的电话回放声音添加预处理功能.

我已经为app音频播放实现了这种过滤(通过修改HALaudioflinger).

我只针对特定设备(Nexus 5X).另外,我只需要过滤播放 - 我不关心录制(上行链路).

更新#1:

为了说清楚 - 我可以修改特定于Qualcomm的驱动程序,或者在Nexus 5X上运行的任何部分,并且可以帮助我修改通话中的播放.

更新#2:

我正在尝试创建一个Java层应用程序,将手机播放实时路由到音乐流.

我已经成功地安装它作为系统的应用程序,获得权限初始化AudioRecordAudioSource.VOICE_DOWNLINK.但是,录音会给出空白样本; 它不记录语音通话.

这是我的工作线程中的代码:

// Start recording
int recBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_DOWNLINK, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, recBufferSize);

// Start playback
int playBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, playBufferSize, AudioTrack.MODE_STREAM);

mRecord.startRecording();;
mTrack.play();

int bufSize = 1024;
short[] buffer = new short[bufSize];
int res;
while (!interrupted())
{
    // Pull recording buffers …
Run Code Online (Sandbox Code Playgroud)

android alsa android-source android-kernel android-rom

76
推荐指数
1
解决办法
1994
查看次数

通话录音 - 使其适用于Nexus 5X(可以使用root或自定义ROM)

我试图使用AudioRecordAudioSource.VOICE_DOWNLINK在Nexus 5X的Android 7.1(我自己的构建从AOSP).

我已经超过了权限阶段 - 将我的APK移动到特权应用程序,AudioRecord在Android源代码中进行了调整以停止抛出有关此源的异常.

现在我在通话期间得到空录音缓冲区.

我知道有很多通话录音应用程序,它们可以在其他设备上运行.我也看到某些应用程序可以对已植根的N5执行某些操作并使其正常工作.

我希望在Nexus 5X上实现同样的目标 - 任何调整对我来说都可以,包括更改Android版本,修改Qualcomm驱动程序,设备配置文件等等 - 基本上可以在自定义ROM中实现.

我已经尝试过使用平台代码 - 硬件/ qcom/audio/hal/voice.c,特别是功能voice_check_and_set_incall_rec_usecase,但到目前为止还没有意义.

还检查了device/lge/bullhead/mixer_paths.xml,发现有一个与呼叫记录相关的部分:

<!-- Incall Recording -->
<ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" />
<ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" />
<ctl name="MultiMedia8 Mixer VOC_REC_UL" value="0" />
<ctl name="MultiMedia8 Mixer VOC_REC_DL" value="0" />
<!-- Incall Recording End -->
Run Code Online (Sandbox Code Playgroud)

但我也无法理解它或它是如何得到帮助的.

android alsa android-mediarecorder android-audiorecord android-rom

34
推荐指数
1
解决办法
1108
查看次数

Android中的3D立方体过渡

我想让屏幕(或屏幕的一部分)切换到3D立方体过渡中的另一部分.我说的是2个普通的Android UI部件,而不是画布上渲染的原始图形.

你会怎么做?

谢谢

UPDATE

该项目很久以前就取消了,所以我没有实现这个目标.如果下面的答案有效,请对答案进行评论,我会将其标记为正确.

android

15
推荐指数
2
解决办法
1万
查看次数

从单个 Android 应用程序向多个 Google Analytics(分析)媒体资源或帐户报告

我们目前在 Android 应用程序中以简单的方式使用 Firebase Analytics。

我们需要报告某些数据(来自特定活动),以便可以对其进行过滤并将其呈现给业务合作伙伴,而无需授予访问其余数据的权限 - 我们只希望他们浏览与其活动相关的报告。

我们发现单独使用 Firebase Analytics 是不可能实现的,因此我们正在考虑创建 2 个 Google Analytics 属性,并根据我们在应用程序内的运行时决策以某种方式向它们报告。

然而,这似乎也是不可能的,因为 Firebase 允许链接到一个特定的 Google Analytics 属性,并且在添加多个属性或决定以编程方式使用哪个属性方面提供零灵活性。 https://support.google.com/analytics/answer/9289234?hl=en

使用多个 Firebase 项目也无法实现这种灵活性,因为只能使用在构建级别定义的默认项目来报告分析。 https://firebase.google.com/docs/projects/multiprojects#reliable-analytics

有什么解决方案吗?或者我们应该为此目的转向另一个第三方分析 SDK?

android google-analytics google-analytics-api firebase firebase-analytics

10
推荐指数
0
解决办法
1079
查看次数

setMicrophoneMute(boolean)在某些设备上不起作用

我在这里找不到任何相关的帖子(但是互联网上的其他小帖子),所以这里是:

AudioManager.setMicrophoneMute(boolean)在我测试的某些特定设备上没有做任何事情:谷歌Nexus S,三星Galaxy S和摩托罗拉Milestone.在任何其他设备上它运作良好.

它甚至保持其"状态"并返回一个布尔值,好像它被静音\取消静音,但它没有静音 - 麦克风继续记录 - 在GSM通话和AudioRecord编程录音中.没有指示性日志消息.

我也搞乱了权限(android.permission.MODIFY_AUDIO_SETTINGS,android.permission.RECORD_AUDIO),这里没什么新东西.

还有其他人遇到过吗?有没有人有解决方法或神奇的解决方案?如果我使用AudioRecord,我只是为这些设备实现自己的"静音" - 我不会传递录制的缓冲区.但它无法帮助我在GSM呼叫中静音麦克风,这是我需要的.

谢谢

----------------更新----------------

见下文.

android

8
推荐指数
3
解决办法
1万
查看次数

当使用具有对话框的沉浸模式时,导航.栏重新出现并调整我的布局大小

当我在Android 4.4及更高版本上运行时,我正在我的应用中使用沉浸式模式.(http://developer.android.com/training/system-ui/immersive.html)

我的活动确实以全屏显示,我通过使用按下音量键setOnSystemUiVisibilityChangeListener.我也有类似的代码将对话框放入沉浸式模式.

但是,当显示对话框时,导航.酒吧跳到屏幕上,然后立即撤退.当对话被解雇时,情况更糟 - 导航.酒吧跳跃并调整背后的活动.

以下是我的支持沉浸式模式的课程.它只是在每个Activity的onResume上调用,并且在构建每个对话框时也会调用一个单独的函数.

我错过了任何旗帜或回调,还是已知的Android问题?

public class ImmersiveModeHelper {

    public ImmersiveModeHelper(Activity activity)
    {
        mActivity = activity;
    }

    @SuppressLint("NewApi")
    public void supportFullScreenImmersiveMode()
    {
        MyLog.d("ImmersiveModeHelper: supportFullScreenImmersiveMode: ");

        // Support full-screen immersive mode on Android 4.4 and up
        if (Build.VERSION.SDK_INT >= 19)
        {
            // Get the needed flags by reflection and use them
            try
            {
                final int immersiveFlag = View.class.getField("SYSTEM_UI_FLAG_IMMERSIVE_STICKY")
                        .getInt(null);
                final int hideNavigationFlag = View.class
                        .getField("SYSTEM_UI_FLAG_HIDE_NAVIGATION").getInt(null);
                final int fullScreenFlag = View.class.getField("SYSTEM_UI_FLAG_FULLSCREEN").getInt(
                        null);


                // Set the …
Run Code Online (Sandbox Code Playgroud)

android android-ui android-dialog android-activity android-4.4-kitkat

8
推荐指数
1
解决办法
6155
查看次数

从大型 Android 项目中提取和翻译多个 strings.xml 文件的最佳方法

我有一个巨大的Android项目,由几个模块组成。

理想情况下,我想要一种完全自动化的方法来从所有子模块和所有资源限定符中提取所有当前的 strings.xml 文件 - 将其放入单独的文件夹中,但保留在其文件夹结构下。

我想将此结果(提取的字符串文件)提供给翻译 - 然后当我收到返回的结果时,自动将所有更新文件重新定位到项目中。

例如,如果我的项目中有:

ModuleA:
   src/main/res/value/strings.xml
   src/main/res/value-fr/strings.xml
   src/main/res/value-es/strings.xml

ModuleB:
   src/main/res/value/strings.xml
   src/main/res/value-fr/strings.xml
   src/main/res/value-es/strings.xml
Run Code Online (Sandbox Code Playgroud)

那么结果应该是相同文件夹结构中的相同 string.xml 文件 - 但重新定位到一个新文件夹中,而没有项目的其余部分。

是否有任何已知/现有的方法来操作复杂的项目及其 strings.xml 文件,或者我是否必须从头开始编写自己的脚本?

android android-resources android-studio android-gradle-plugin android-module

7
推荐指数
1
解决办法
1162
查看次数

SMS线程表的正确CONTENT_URI是什么?

我正在尝试查询SMS线程表,但我似乎没有使用正确的URI.

查询URI"content:// sms/conversations"为我提供了以下列:

[thread_id,msg_count,snippet]

查询URI"content:// mms-sms/conversations"为我提供了以下列:

[body,person,sub,subject,retr_st,type,date,ct_cls,sub_cs,_id,read,ct_l,tr_id,st,msg_box,thread_id,reply_path_present,m_cls,read_status,ct_t,status,retr_txt_cs,d_rpt,error_code,m_id ,m_type,v,exp,pri,service_center,address,rr,rpt_a,resp_txt,locked,resp_st,m_size]

我正在寻找从android/provider/Telephony.java中的Threads表中提供值的URI - data,recipient_ids,message_count,read等等...

谢谢

android android-contentprovider

6
推荐指数
1
解决办法
3188
查看次数

升级订阅计划时出现应用结算错误 - “从服务器 [DF-DFERH-01] 检索信息时出错”

我们的应用程序有 3 种可能的自动续订订阅计划 - 每月、6 个月和每年。它们在 Google Play 中定义并且在购买时运行良好。

最近,我们添加了一个使用新 API 更改计划的选项 - https://developer.android.com/google/play/billing/billing_subscriptions#Allow-upgrade

对于降级(更短的订阅期),我们使用按DEFERRED比例分配模式。对于升级,我们使用IMMEDIATE_AND_CHARGE_PRORATED_PRICE.

在我们的测试中,我们发现所有更改都可以正常工作,除非将“6 个月”更改为“每年”。每当我们这样做时(用户已经订阅了 6 个月,尝试更改为每年订阅),而不是获得正常的购买流程,我们会收到错误消息。显示的错误信息是

“从服务器 [DF-DFERH-01] 检索信息时出错”

我们从库中收到的实际错误代码是SERVICE_UNAVAILABLE.

同样 - 所有其他流程都正常工作,例如每月 -> 每年,每月 -> 6 个月。

缺乏关于正在发生的事情的文档和清晰度,并且 logcat 没有显示任何有用的信息。

android in-app-purchase in-app-billing google-play google-play-services

6
推荐指数
1
解决办法
557
查看次数

优化重片段着色器的性能

我需要帮助优化以下一组着色器:

顶点:

    precision mediump float;

uniform vec2 rubyTextureSize;

attribute vec4 vPosition;
attribute vec2 a_TexCoordinate;

varying vec2 tc;

void main() {
    gl_Position = vPosition;

    tc = a_TexCoordinate;
}
Run Code Online (Sandbox Code Playgroud)

分段:

precision mediump float;

/*
 Uniforms
 - rubyTexture: texture sampler
 - rubyTextureSize: size of the texture before rendering
 */

uniform sampler2D rubyTexture;
uniform vec2 rubyTextureSize;
uniform vec2 rubyTextureFract;

/*
 Varying attributes
 - tc: coordinate of the texel being processed
 - xyp_[]_[]_[]: a packed coordinate for 3 areas within the texture
 */

varying vec2 …
Run Code Online (Sandbox Code Playgroud)

shader android opengl-es opengl-es-2.0 mali

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