Как использовать длительное нажатие и записывать звук в Android

В моем приложении мне нужно использовать один щелчок и долгое нажатие на кнопку

при нажатии на что-то (вызов Itemclick()) и долгое нажатие для записи звука

и используйте этот код:

 send.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
            {
                recording =false;
                t=new Timer();
                t.scheduleAtFixedRate(new TimerTask() {

                    @Override
                    public void run() {
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                if(count>=2)
                                    t.cancel();
                                    count++;

                            }
                        });
                    }
                }, 1, 1000);
                break;
            }    
            case MotionEvent.ACTION_MOVE:
            {
                if(count >=2&&!recording)
                {

                     recording=true;
                     count=0;
                     Rec=new Recorder();
                     Rec.startRecord();
                }
                break;

            }
            case MotionEvent.ACTION_UP:
            { 
                t.cancel();
                if(!recording)
                {
                    count=0;
                    Itemclick();
                    break;
                }
                recording=false;
                Rec.StopRecord();
                db.open();
                db.insert_offline(Rec.getName(), true, false);
                listItems.add(Rec.getName());
                type.add("v");
                adapter.notifyDataSetChanged();
                db.close();
                Rec=null;
                break;
            }
           }
            return false;
        }
    });

В этом коде я использую таймер для поиска длинного нажатия, но мне нужен простой и быстрый способ сделать это.

У вас есть идея или лучшее решение?


person Amir133    schedule 14.07.2016    source источник


Ответы (1)


Вероятно, вы можете заменить таймер и использовать встроенные прослушиватели событий Android для щелчка и удержания событий:

View.OnLongClickListener
View.OnClickListener

Идя по этому пути, ваш код будет выглядеть примерно так, как показано ниже.

send.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //code for click event
    }
});

send.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        //code for hold event... which sounds like you want to begin recording here
        return true; //indicate we're done listening to this touch listener
    }
});

send.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_UP:
            { 
            //stop recording voice if a long hold was detected and a recording started
            return true; //indicate we're done listening to this touch listener
            }
        }
        return false;
    }
});
person Nicholas Ackerman    schedule 14.07.2016
comment
один вопрос: зачем возвращать true для onLongClick в вашем, зачем возвращать false. Который отличается? - person Amir133; 15.07.2016
comment
Взято из этого сообщения SO: stackoverflow.com/questions/7333608/ onLongClick() — возвращает логическое значение, указывающее, воспользовались ли вы событием и не следует ли его передавать дальше. То есть верните true, чтобы указать, что вы обработали событие и на этом следует остановиться; верните false, если вы не обработали его и/или событие должно продолжаться для любых других слушателей по щелчку. - person Nicholas Ackerman; 15.07.2016