无法覆盖某些设备上的接近传感器,Android

无法覆盖某些设备上的接近传感器,Android,android,proximitysensor,Android,Proximitysensor,我正在尝试为呼入和呼出的电话制作一个自定义布局,当通话进行时,将显示一个特定的图像,即使用户覆盖接近传感器,该图像也必须保持可见。我尝试使用wakelock,但没有成功,现在我使用的是接近传感器,它只会隐藏按钮,留下图像显示。这在一些手机和所有的模拟器上都有效,但三星和索尼的手机很少在靠近传感器时直接关闭屏幕。这是我的接近传感器代码: @Override protected void onPause() { super.onPause(); } @Override protected

我正在尝试为呼入和呼出的电话制作一个自定义布局,当通话进行时,将显示一个特定的图像,即使用户覆盖接近传感器,该图像也必须保持可见。我尝试使用wakelock,但没有成功,现在我使用的是接近传感器,它只会隐藏按钮,留下图像显示。这在一些手机和所有的模拟器上都有效,但三星和索尼的手机很少在靠近传感器时直接关闭屏幕。这是我的接近传感器代码:

@Override
protected void onPause() {
    super.onPause();
}


@Override
protected void onResume() {
    super.onResume();
    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
    sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
public void onSensorChanged(SensorEvent event) {
    float distance = event.values[0];

    if(distance < 4){
        buttonsLayout.setVisibility(View.INVISIBLE);
    }
    else {
        buttonsLayout.setVisibility(View.VISIBLE);
    }

}
这就是我接受电话的方式:

private void acceptCall() {

    timerLayout.setVisibility(View.VISIBLE);
    answerButton.setVisibility(View.GONE);
    startTime = SystemClock.uptimeMillis();
    customHandler.postDelayed(updateTimerThread, 0);

    try {
        Runtime.getRuntime().exec("input keyevent " +
                Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));

    } catch (IOException e) {
        String enforcedPerm = "android.permission.CALL_PRIVILEGED";
        Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));
        Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));

        sendOrderedBroadcast(btnDown, enforcedPerm);
        sendOrderedBroadcast(btnUp, enforcedPerm);
    }
}

你可以试着对他们隐瞒信息,是否有一个活动调用要从设备或用户隐藏?要从三星和SonyYeah的业务逻辑隐藏,我希望对所有设备都这样做,但如果我以编程方式进行调用和结束主题,我如何才能从设备隐藏该调用?请更新您的问题,以包括您使用的API以及如何调用它们?
private void acceptCall() {

    timerLayout.setVisibility(View.VISIBLE);
    answerButton.setVisibility(View.GONE);
    startTime = SystemClock.uptimeMillis();
    customHandler.postDelayed(updateTimerThread, 0);

    try {
        Runtime.getRuntime().exec("input keyevent " +
                Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK));

    } catch (IOException e) {
        String enforcedPerm = "android.permission.CALL_PRIVILEGED";
        Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));
        Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));

        sendOrderedBroadcast(btnDown, enforcedPerm);
        sendOrderedBroadcast(btnUp, enforcedPerm);
    }
}