2015-05-04 88 views
3

我需要在HTC One設備上使用紅外線發射器。在lolipop更新之前,我可以做到這一點沒有問題,但現在我的代碼不起作用。HTC ONE M8紅外線衝擊波棒棒糖更新不起作用

ConsumerIrManager mCIR = (ConsumerIrManager)getSystemService(Context.CONSUMER_IR_SERVICE); 
    mCIR.transmit(freq, pat); 

,其中頻率和模式是必要的值給力我的電視上(從製造商)

我不明白這段代碼運行的任何錯誤,唯一的問題是,紅外線發射燈不亮在HTC一臺設備上。 (通過相機查看紅外線)。我不明白,完全相同的代碼適用於galaxy s5設備。我會很感激任何可以讓紅外功能在HTC一臺設備上工作的人的幫助。

+0

http://stackoverflow.com/questions/28831462/consumerirmanager-not-working-on-htc-m8-lollipop – dljava

回答

3

是的,這個問題似乎已被reported在Android的官方錯誤跟蹤。

我正在開發一個應用程序,它使用Android 4.4 KitKat中引入的官方消費者IR API 。自從棒棒糖推出 流行設備,如HTC One M8或三星Galaxy S5後,我得到 許多來自該設備用戶的報告,說我的應用不適用於 棒棒糖。我自己並不擁有棒棒糖設備,但我借了M8 並做了一些測試。

好像方法ConsumerIrManager.transmit()是 棒棒糖上沒有任何操作。無論是給出模式,它立即返回。

在發現Galaxy S5用戶有同樣的問題之前,我 聯繫了HTC對此事的支持,並被告知要聯繫Google支持 。

似乎S5設備也遇到了同樣的問題,儘管很難說,因爲開發商正在從S5擁有者獲得矛盾的報告。

這是一個HTC-only fix,有人發現他的M7停止工作後,因爲一個棒棒糖更新。在他們切換到官方的Google API之前,他基本上恢復到了IR HTC API的早期版本。

否則,您應該在錯誤跟蹤器上對問題進行演示,也許讓您自己的用戶也這樣做。這個問題出現的人越多,就會給予更高的優先權。

+0

該死的,我剛剛更新了我的Galaxy S4到棒棒糖,還有一個紅外線爆發應用程序寫的剛剛停止工作...我想這是一個錯誤。 – Mauker

0

我剛固定此問題,三星設備:

的Android 4.4.3之前圖案的各要素是用於開/關脈衝循環的數量。

對於Android 4.4.3及以上版本的每個元素,如果開啓/關閉脈衝的微秒數。

實施例:

要發送波上0.5秒,0.5斷,0.5上,在38000Hz

的Android 4.4.3您的圖案將是[19000,190000,19000]前 - 19000來從0.5s * 38000Hz

對於Android 4.4.3+,你的模式應該是[500000,500000,500000] - 那就是你將每次轉換爲微秒(us)。

我要在這一點上責備Google:在4.4.3發佈之前,他們的API說使用循環的次數,4.4.3之後改爲使用微秒(us),三星只是遵循API因此打破了我們的應用程序。

0

*編輯:此修復程序的更新版本可以在這裏找到:https://stackoverflow.com/a/28934938/1042362

給這一個鏡頭:

/* 
* 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; 
      } 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; 
} 
+0

感謝您的幫助。我嘗試過,它只能在棒棒糖更新之前的HTC上運行。更新後的紅外發射器甚至沒有亮起:(任何更多的幫助將不勝感激。 – alexward1230

+0

@ alexward1230你解決了你的問題?我有一個紅外應用程序,在HTC一個M7的Android 5.1不工作在M8所有確定三星我不知道該怎麼做更多... – GMG

+0

@GMG你是否嘗試過上面的答案?我已經更新了它,因爲他嘗試了代碼,所以它應該有點不同。 – Dwebtron

0

股票Remote已自四月底停止。下載M9上使用的品牌版Peel應用程序。

0

我在HTC One M7上的經驗: 1)KitKat 4.4.3 ConsumerIRManager代碼工作正常,傳遞一個微秒數組。

2)更新到Lolipop 5.0.2,IR Led沒有任何傳輸,沒有操作問題。我重構了我的代碼以使用HTC API,它需要「時鐘滴答」而不是直接微秒的波形。現在所有人都在工作。

看來我們不能在HTC One上使用ConsumerIRManager,除非是特定的版本,即4.4.3。