Android HTC IR API棒棒糖
在棒棒糖更新后,我正试图让红外发射器在HTC ONE m8上工作。我正在尝试使用这里找到的HTC Sense IR SDK(addon-HTC_IR_api-HTC-19):我导入示例项目(HTCConsumerIR)并在我的HTC设备上运行应用程序,而该应用程序根本不传输信号。我没有收到任何错误,但红外发射器甚至没有打开。这是同一个项目,没有任何修改。为什么它不起作用?任何一个在HTC工作的人的帮助都是非常合适的。除HTC外,它可以在所有设备上使用红外线 以下是主类的代码(如果有帮助的话):Android HTC IR API棒棒糖,android,android-5.0-lollipop,infrared,Android,Android 5.0 Lollipop,Infrared,在棒棒糖更新后,我正试图让红外发射器在HTC ONE m8上工作。我正在尝试使用这里找到的HTC Sense IR SDK(addon-HTC_IR_api-HTC-19):我导入示例项目(HTCConsumerIR)并在我的HTC设备上运行应用程序,而该应用程序根本不传输信号。我没有收到任何错误,但红外发射器甚至没有打开。这是同一个项目,没有任何修改。为什么它不起作用?任何一个在HTC工作的人的帮助都是非常合适的。除HTC外,它可以在所有设备上使用红外线 以下是主类的代码(如果有帮助的话):
public class OneCIRActivity extends Activity {
private final static String TAG = "OneCIR";
private boolean running;
ConsumerIrManagerCompat mCIR;
Button btnLearn, btnSend, btnSendByIRManager, btnStart, btnStop;
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_onecir);
btnStart = (Button)findViewById(R.id.buttonstart);
// btnStart.setOnClickListener(btnStartListener); //HTC optional (see onResume())
// btnStart.setText("CIRControl.start");
btnStart.setVisibility(View.GONE);
btnLearn = (Button)findViewById(R.id.buttonlearn);
btnLearn.setOnClickListener(btnLearnListener);
btnLearn.setText("Learn IR"); //HTC
btnSend = (Button)findViewById(R.id.buttonsend);
btnSend.setOnClickListener(btnSendIRListener);
btnSend.setText("Send IR"); //BOTH
btnStop = (Button)findViewById(R.id.buttonstop);
// btnStop.setOnClickListener(btnStopListener); //HTC optional
// btnStop.setText("CIRControl.stop");
btnStop.setVisibility(View.GONE);
textView = (TextView)findViewById(R.id.textview1);
mCIR = ConsumerIrManagerCompat.createInstance(getApplicationContext());
mCIR.start(); //for HTC - noop otherwise (also see onResume()/onPause() )
mCIR.setTextView(textView); // to pass errors to UI
updateUI();
}
public void updateUI() {
if (mCIR != null) {
if (mCIR.hasIrEmitter()) {
if((mCIR.supportedAPIs|ConsumerIrManagerCompat.HTCSUPPORT)!=0) {
btnLearn.setEnabled(true);
} else {
btnLearn.setEnabled(false);
}
btnSend.setEnabled(true);
} else {
btnLearn.setEnabled(false);
btnSend.setEnabled(false);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater().inflate(R.menu.activity_onecir, menu);
return true;
}
private OnClickListener btnLearnListener = new OnClickListener() {
public void onClick(View v) {
//Use this HTC API to learn any IR function from remote controller
mCIR.learnIRCmd(10); // set 10sec timeout
textView.setText("Learning for 10 seconds");
}
};
@Override
protected void onResume() {
super.onResume();
if(!mCIR.isStarted()) {
mCIR.start(); //needed for HTC API (noop otherwise) before calling other APIs
}
}
@Override
protected void onPause() {
super.onPause();
if(mCIR.isStarted()) {
mCIR.stop(); //needed for HTC API (noop otherwise)
}
}
private OnClickListener btnSendIRListener = new OnClickListener() {
public void onClick(View v) {
if (!running) {
btnSend.setEnabled(false);
running = true;
new Thread(new Runnable() {
@Override
public void run() {
SharedPreferences preferences = getSharedPreferences(ConsumerIrManagerCompat.PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
// default IR data example from a laptop's ir remote: right button
int[] frame = {340,172,22,22,22,65,22,65,22,65,22,22,22,65,22,65,22,65,22,65,22,65,22,64,22,23,22,22,22,22,22,23,22,65,22,22,22,65,22,65,22,22,22,22,22,22,22,22,22,23,22,22,22,22,22,22,22,64,22,22,22,22,22,22,22,23,22,1600,341,86,22,3677,341,86,22,367};
int frequency = preferences.getInt(ConsumerIrManagerCompat.PREFERENCE_KEY_FREQUENCY, 38000);
// otherwise use last learned code
String framesaved = preferences.getString(ConsumerIrManagerCompat.PREFERENCE_KEY_FRAME, null);
if(framesaved!=null ) {
StringTokenizer tok = new StringTokenizer(framesaved.substring(1, framesaved.length()-2), ",");
int num = tok.countTokens();
if(num>0) {
frame = new int[num];
int index = 0;
while (tok.hasMoreTokens()) {
frame[index++] = Integer.parseInt(tok.nextToken().trim());
}
}
}
mCIR.transmit(frequency, frame);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
running = false;
runOnUiThread(new Runnable() { public void run() {btnSend.setEnabled(true);}});
}
}).start();
}
}
};
/*
private OnClickListener btnStartListener = new OnClickListener() {
public void onClick(View v) {
//HTC CIR commands are only allowed after using this start() method.
mCIR.start();
text1.setText("Attached to CIR control service");
updateUI();
}
};
private OnClickListener btnStopListener = new OnClickListener() {
public void onClick(View v) {
//TODO: before doing this, developer must make sure pending CIR commands.
//will be handled if they had been sent to HTC CIR.
mCIR.stop();
text1.setText("Detached from CIR control service");
updateUI();
}
};
*/
//TODO: HTC: Use this method to cancel sending IR command and learning IR command
// Example: Before learning IR activity finishes, cancel command can stop it.
// Example: If send an IR command with repeat count 255, cancel command can stop it.
//
// mCIR.cancelCommand();
HtcConsumerIr应用程序在棒棒糖上不起作用,因为它只在你有KitKat的情况下使用HTC库。 如果打开ConsumerManager compat.java并更改此行:
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT
&& hasPackage("com.htc.cirmodule", context)) {
return new ConsumerIrManagerHtc(context);
} else {
return new ConsumerIrManagerBase(context);
}
它会起作用的
升级到棒棒糖后,我正在尝试让我的应用程序重新工作。它在KitKat中运行良好,无需使用HTC库。
我还没有让它完全工作,但我已经让它传送了。看来我们又开始使用脉冲计数而不是持续时间了。这可能会有帮助:他说要使用htc api,这正是我想做的,但我想不出来:(
if (hasPackage("com.htc.cirmodule", context)) {
return new ConsumerIrManagerHtc(context);
} else {
return new ConsumerIrManagerBase(context);
}