2014-11-17 2 views
0

Есть основная функция, из которой было вызвано диалоговое окно предупреждения, изменение громкости, когда диалоговое окно открытого предупреждения не сработало, поместите OnKeyListener и теперь, когда вы нажимаете кнопки регулировки громкости, обрабатываются дважды, а слушатель, который в MainActivity процессах щелкая правильно, помогите мне понятьРучки OnKeyListener дважды нажаты

код в MainActivity

public void ShowTrack(final String smetaout,String stitleout){ 

    if (MediaService.isPlayingDubstep || MediaService.isPlayingLiquid || MediaService.isPlayingMain == true) { 
     allbtnStop(); 
    } 
    alert = new AlertDialog.Builder(this).create(); 
    alert.setTitle(stitleout); 
    alert.setCanceledOnTouchOutside(false); 

    LayoutInflater li = getLayoutInflater(); 
    View v = li.inflate(R.layout.track_view, null); 
    Log.d("My Webview", "ShowTrack"); 
    final WebView wv = (WebView) v.findViewById(R.id.trackView); 
    wv.setVisibility(View.GONE); 
    playTrack = (Button) v.findViewById(R.id.playTrack); 
    progress = (ProgressBar) v.findViewById(R.id.progress); 
    playTrack.setVisibility(View.INVISIBLE); 
    closeTrack = (Button) v.findViewById(R.id.close); 
    colors_sel = mSettings.getString("colors", "1"); 
    if (colors_sel.equals("0")) { 
     playTrack.setBackgroundResource(R.drawable.stop_button_red); 

    } 
    else if (colors_sel.equals("1")) { 
     playTrack.setBackgroundResource(R.drawable.stop_button_green); 

    } 
    else if (colors_sel.equals("2")) { 
     playTrack.setBackgroundResource(R.drawable.stop_button_blue); 

    } 

    progress.setVisibility(View.VISIBLE); 
    wv.getSettings().setJavaScriptEnabled(true); 
    wv.loadUrl(smetaout); 
    wv.setWebViewClient(new WebViewClient() { 
    @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (!loadingFinished) { 
       redirect = true; 
      } 
      loadingFinished = false; 
      view.loadUrl(url); 
      Log.d("shouldOverrideUrlLoading", url); 

      MediaService.releaseMP(); 

      return true; 
     } 

     @Override 
      public void onPageFinished(WebView view, String url) { 
       if(!redirect){ 
        loadingFinished = true; 
        Log.d("onPageFinished", "loadingFinished = true;"); 
       } 

       if(loadingFinished && !redirect){ 
        //HIDE LOADING IT HAS FINISHED 
        if (loadtrack == true){ 
         myUri = Uri.parse(url); 
         context = getApplicationContext(); 
         at = (ActionTask) new ActionTask().execute();   




        playTrack.setOnClickListener(new View.OnClickListener() { 

         public void onClick(View v) { 
          colors_sel = mSettings.getString("colors", "1"); 
          if (MediaService.isPlayingTrack) { 
           MediaService.pauseT(); 
           if (colors_sel.equals("0")) { 
            playTrack.setBackgroundResource(R.drawable.play_button_red); 
           } else if (colors_sel.equals("1")) { 
            playTrack.setBackgroundResource(R.drawable.play_button_green); 
           } else if (colors_sel.equals("2")) { 
            playTrack.setBackgroundResource(R.drawable.play_button_blue); 
           } 
          }else{ 
           visibleProgressTrack(); 
           MediaService.startT(); 
           if (colors_sel.equals("0")) { 
            playTrack.setBackgroundResource(R.drawable.stop_button_red); 
           } else if (colors_sel.equals("1")) { 
            playTrack.setBackgroundResource(R.drawable.stop_button_green); 
           } else if (colors_sel.equals("2")) { 
            playTrack.setBackgroundResource(R.drawable.stop_button_blue); 
           } 
          } 

           Log.i("ShowTrack","isPlayingTrack="+MediaService.isPlayingTrack); 
          } 
         }); 
        } 
        loadtrack = !loadtrack; 
       } else{ 
        redirect = false; 
       } 
     } 
    }); 




    alert.setView(v); 

    closeTrack.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      MediaService.isPlayingTrack = false; 
      if (MediaService.mediaPlayer != null) { 
       if (at != null){ 
       at.cancel(false); 
       } 
       MediaService.stopT(); 
       MediaService.releaseMP(); 
      } 
      alert.dismiss(); 
     } 
    }); 
    alert.setOnKeyListener(new DialogInterface.OnKeyListener() { 

     @Override 
     public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 

      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       MediaService.isPlayingTrack = false; 
       if (MediaService.mediaPlayer != null) { 
        if (at != null){ 
        at.cancel(false); 
        } 
        MediaService.stopT(); 
        Log.i("Key","Back"); 
        MediaService.releaseMP(); 

       } 
       dialog.dismiss(); 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){ 
       int index = seekbar.getProgress(); 
       seekbar.setProgress(index + 1); 
       Log.i("onKey","seekbar="+index); 
       return true; 
      } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){ 
       int index = seekbar.getProgress(); 
       seekbar.setProgress(index - 1); 
       Log.i("onKey","seekbar="+index); 
       return true; 
      } 
      return onKeyDown(keyCode, event); 

     } 
    }); 
    alert.show(); 
} 

public static void initBar(SeekBar bar, final int stream) { 
     bar.setMax(am.getStreamMaxVolume(stream)); 
     bar.setProgress(am.getStreamVolume(stream)); 

     bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     public void onProgressChanged(SeekBar bar, int progress, 
             boolean fromUser) { 
      am.setStreamVolume(stream, progress, AudioManager.FLAG_PLAY_SOUND); 
      am.setStreamVolume(stream, progress, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
     } 

     public void onStartTrackingTouch(SeekBar bar) { 
      // no-op 
     } 

     public void onStopTrackingTouch(SeekBar bar) { 
      // no-op 
     } 


     }); 

    } 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //ProgressBar seekbar = (SeekBar)findViewById(R.id.seekBar1); 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){ 
     int index = seekbar.getProgress(); 
     seekbar.setProgress(index + 1); 
     Log.i("onKeyDown","seekbar="+index); 
     return true; 
    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){ 
     int index = seekbar.getProgress(); 
     seekbar.setProgress(index - 1); 
     Log.i("onKeyDown","seekbar="+index); 
     return true; 
    } else if (keyCode == KeyEvent.KEYCODE_BACK){ 
     if (exit==false) 
      Toast.makeText(this, R.string.exit, Toast.LENGTH_SHORT).show(); 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      public void run() { 
        exit = false; 
      } 
     }, 3000); 
     if (exit) { 
      stopService(); 
      unregisterReceiver(myReceiver); 
      CallReceiver.state = false; 
      MainActivity.this.finish(); 
     } 
     exit = true; 
     return true; 

    } 
    return super.onKeyDown(keyCode, event); 
} 

ответ

0

onKeyListener обнаруживает нажатие клавиши вниз и нажатия клавиши вверх. Эти 2 события запускаются в onKeyListener и заставляют событие запускаться дважды.

Проверьте только событие нажатия клавиши только ... Кажется, вы не обнаруживаете этот тип событий в методах onKey. Что-то вроде этого в методе onKey должно предотвращать двойной обжиг

@Override 
public boolean onKey(View v, int keyCode, KeyEvent event) { 
    if (event.getAction()==KeyEvent.ACTION_UP) { 
     // your logic now goes in here 
    } 
    ..... 
} 
Смежные вопросы