2015-07-12 5 views
0

Я занимаюсь разработкой App.but не очень хорошо работает.логическая ошибка в моем приложении

он не входит внутрь петли.

что случилось с моим кодом?

код:

private int sampleRate =44100;//Integer.parseInt(audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); 
private int channelConfig = AudioFormat.CHANNEL_OUT_MONO; 
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;  
AudioRecord recorder; 

private boolean status = true; 



@SuppressLint("NewApi") @TargetApi(Build.VERSION_CODES.GINGERBREAD) @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 


    receiveButton = (Button) findViewById (R.id.receive_button); 
    stopButton = (Button) findViewById (R.id.stop_button); 
    receive_label= (TextView) findViewById(R.id.receive_label); 
    receiveButton.setOnClickListener(receiveListener); 
    stopButton.setOnClickListener(stopListener); 
    port=(EditText) findViewById(R.id.editText1); 
    button= (Button) findViewById(R.id.button1); 
    button.setOnClickListener(close); 
    //AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
    // sampleRate =Integer.parseInt(audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); 
} 

private final OnClickListener close = new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
      System.exit(0); 
    } 

}; 



private final OnClickListener stopListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     status = false; 
     speaker.release(); 
     Log.d("VR","Speaker released.s"); 

    } 

}; 


private final OnClickListener receiveListener = new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     status = true; 

     receive_label.setText("socket...2"); 
     startReceiving(); 

    } 

}; 

public void startReceiving() { 

    Thread receiveThread = new Thread (new Runnable() { 

     @Override 
     public void run() { 

      try { 

       int minBufSize =460;//recorder.getMinBufferSize(sampleRate,channelConfig,audioFormat); 


       Log.d("VR", ""+channelConfig+" "+audioFormat+sampleRate); 

        DatagramSocket socket = new DatagramSocket(50005); 
        Log.d("VR", "Socket Created.s"); 


        byte[] buffer = new byte[minBufSize+=4096]; 


       // for (int sampleRate : new int[] {44100,8000, 11025, 16000 }) { // add the rates you wish to check against 




         Log.d("bufersize", "bufer size :"+minBufSize); 
         Log.d("bufersize", "bufer size :"+sampleRate); 
         if (minBufSize != AudioRecord.ERROR_BAD_VALUE) { 



          speaker = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM); 


          speaker.play(); 
          Log.d("VR", "spekaer playing..."); 
         } 
       // } 


        //minimum buffer size. need to be careful. might cause problems. try setting manually if any problems faced 
       // int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); 
         Log.d("VR", ""+status); 

          while(status == true) { 

            DatagramPacket packet = new DatagramPacket(buffer,buffer.length); 

            socket.receive(packet); 


            Log.d("VR", "Packet Received.s"); 

            //reading content from packet 
           buffer=packet.getData(); 
            Log.d("VR", "Packet data read into buffer.s"); 


            //sending data to the Audiotrack obj i.e. speaker 
            speaker.write(buffer, 0, minBufSize); 
           Log.d("VR", "Writing buffer content to speaker.s"); 
         } 

         } catch (SocketException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 




       } 


    }); 
    receiveThread.start(); 
}} 

я вижу все журналы, которые я положил в коде, но не те, внутри цикла

пожалуйста, дайте мне вашу лучшую помощь

заранее спасибо

ответ

1

Добавить receiveThread.run(); в startReceiving()

+0

не r в качестве команды. вы добавите его для меня? – Ryan110

+0

У меня естьThread.start(); что происходит между запуском и запуском? – Ryan110

+0

@ Ryan110 Он допустил ошибку. Когда вы пишете 'receiveThread.run();' вместо 'receiveThread.start()' вы запускаете код в этом же потоке (нет на отдельной ветке) – krystian71115

Смежные вопросы