棒棒糖更新后,我正在尝试使红外发射器在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();

最佳答案

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库。
我还没有完全正常运行,但是正在传输。似乎我们又回到使用脉冲计数而不是持续时间了。

关于android - HTC IR API Lollipop ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30390787/

10-13 04:15