Intereting Posts
Приложение не установлено »Ошибка на Android 2.3.4 Диалоговое окно Android alert alert Как интерфейс ReadableMap в React-native конвертирует JS в JAVA? Как можно обрабатывать несколько запросов для заполнения моделей с помощью RXJava Observables? Как применить цветной фильтр в видео в приложении для Android FloatingActionButton setVisibility () не работает Проверьте, отображается ли идентификатор ресурса из представления в массиве и нажмите на него (Android-Espresso) Получение 401 при запросе токена доступа с указателем внутри android Как я могу отправить предварительно записанный (wav) файл во время голосового вызова? Цель камеры или галереи уничтожает старую активность на некоторых устройствах Как зарегистрировать мое приложение для Android, чтобы открыть собственное расширение файла, а не для всех файлов Bundle in onActivityCreated () возвращает null, даже после установки значений в onSaveInstanceState () Вернитесь к определенной деятельности SlidingPaneLayout – как всегда показывать небольшую часть слайд-представления (например, в тусовках) Скрыть / Показать панель инструментов программно на CoordinatorLayout

ИК-излучатель и Android 5.0

Я столкнулся с проблемой с ИК-излучателем на моей Galaxy S5 под управлением Android 5.0.

До того, как я обновил его до версии 5.0, мое приложение отлично работало на моем телефоне, но теперь устройство, которое, как я полагаю, у меня получилось, не реагирует. Когда я нажимаю на свое приложение для отправки ИК-кода, светодиод мигает, указывая на то, что IR-менеджер активирован, и я могу получить сигнал с ИК-фотодиодом, подключенным к моей области видимости. К сожалению, форма сигнала, который я получаю, сильно отличается от того, что должно быть.

Могу добавить, что тот же самый код, который работает на моем планшете под Android 4.4.2, все еще работает отлично.

Чтобы помочь в ответе на мой вопрос, образец моего кода:

private String commande="0000 0070 0000 0032 0080 003F 0010 0010 0010 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 " + "0010 0010 0010 0010 0010 0010 0010 0010 0010 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 " + "0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 " + "0010 0010 0010 0010 0010 0010 0010 0030 0010 0030 0010 0030 0010 0030 0010 0030 0010 0010 0010 0030 0010 0A98"; IRManager=(ConsumerIrManager)activité.getSystemService(Context.CONSUMER_IR_SERVICE); code=commandConversion(commande); IRManager.transmit(code.getFrequency(),code.getCodes()); private RemoteCommandeCode commandConversion(String command) { List<String> list; RemoteCommandeCode code; int frequency; list= new ArrayList<String>(Arrays.asList(command.split(" "))); list.remove(0); // dummy frequency = Integer.parseInt(liste.remove(0), 16); // frequency list.remove(0); // seq1 list.remove(0); // seq2 code=new RemoteCommandeCode(list.size()); for (int i = 0; i < list.size(); i++) { code.setCode(i,Integer.parseInt(list.get(i), 16)); } frequency = (int) (1000000 / (frequency * 0.241246)); code.setFrequency(frequency); return(code); } public class RemoteCommandeCode { private int fréquence; private int [] codes; public RemoteCommandeCode(int nombreCodes){ codes=new int[nombreCodes]; } public int getFrequency() { return frequency; } public void setFrequency(int frequency) { this.frequency = frequency; } public int [] getCodes() { return codes; } public void setCodes(int [] codes) { this.codes = codes; } public void setCode(int i,int code){ codes[i]=code; } } 

Как уже было сказано, изображения сигнала, испускаемого простым кодом «0000 0070 0000 0003 0010 0020 0010 0020 0010 0020», я получаю 4.4.2: Сигнал на Android 4.4.2

И на Android 5.0: Сигнал на Android 5.0

    Этот метод исправит проблемы с IR для всех версий Android

     /* * preforms some calculations on the codesets we have in order to make them work with certain models of phone. * * HTC devices need formula 1 * Samsungs want formula 2 * * Samsung Pre-4.4.3 want nothing, so just return the input data * */ private static int[] string2dec(int[] irData, int frequency) { int formula = shouldEquationRun(); //Should we run any computations on the irData? if (formula != 0) { for (int i = 0; i < irData.length; i++) { if (formula == 1) { irData[i] = irData[i] * (1000000/frequency);//the brackets should avoid an arithmetic overflow } else if (formula == 2) { irData[i] = (int) Math.ceil(irData[i] * 26.27272727272727); //this is the samsung formula as per http://developer.samsung.com/android/technical-docs/Workaround-to-solve-issues-with-the-ConsumerIrManager-in-Android-version-lower-than-4-4-3-KitKat } } } return irData; } /* * This method figures out if we should be running the equation in string2dec, * which is based on the type of device. Some need it to run in order to function, some need it NOT to run * * HTC needs it on (HTC One M8) * Samsung needs occasionally a special formula, depending on the version * Android 5.0+ need it on. * Other devices DO NOT need anything special. */ private static int shouldEquationRun() { //Some notes on what Build.X will return //System.out.println(Build.MODEL); //One M8 //System.out.println(Build.MANUFACTURER); //htc //System.out.println(Build.VERSION.SDK_INT); //19 //Samsung's way of finding out if their OS is too new to work without a formula: //int lastIdx = Build.VERSION.RELEASE.lastIndexOf("."); //System.out.println(Build.VERSION.RELEASE.substring(lastIdx+1)); //4 //handle HTC if (Build.MANUFACTURER.equalsIgnoreCase("HTC")) { return 1; } //handle Lollipop (Android 5.0.1 == SDK 21) / beyond if (Build.VERSION.SDK_INT >= 21) { return 1; } //handle Samsung PRE-Android 5 if (Build.MANUFACTURER.equalsIgnoreCase("SAMSUNG")) { if (Build.VERSION.SDK_INT >= 19) { int lastIdx = Build.VERSION.RELEASE.lastIndexOf("."); int VERSION_MR = Integer.valueOf(Build.VERSION.RELEASE.substring(lastIdx + 1)); if (VERSION_MR < 3) { // Before version of Android 4.4.2 //Note: NO formula here, not even the other one return 0; } else { // Later version of Android 4.4.3 //run the special samsung formula here return 2; } } } //if something else... return 0; } 

    * Edit: Благодаря помощи OP я смог выяснить, как это исправить. Этот ответ должен теперь решить эту проблему.