我想在棒棒糖更新后让红外发射器在HTC ONE m8上工作。我正在尝试使用这里找到的HTC Sense IR SDK(addon-htc_ir_api-htc-19):http://www.htcdev.com/devcenter/opensense-sdk/htc-ir-api我导入示例项目(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();
答案 0 :(得分:1)
HtcConsumerIr应用程序不适用于Lollipop,因为如果你有KitKat它只使用HTC库。 如果您打开ConsumerIrManagerCompat.java并更改此行:
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT
&& hasPackage("com.htc.cirmodule", context)) {
return new ConsumerIrManagerHtc(context);
} else {
return new ConsumerIrManagerBase(context);
}
到此:
if (hasPackage("com.htc.cirmodule", context)) {
return new ConsumerIrManagerHtc(context);
} else {
return new ConsumerIrManagerBase(context);
}
它会起作用。
我目前正在尝试升级到Lollipop后让我的应用再次运行。它在KitKat中运行良好,无需使用HTC库。 我还没有完全正常工作,但我已经让它传输了。似乎我们又回到使用脉冲计数而不是持续时间。