APP在模拟器中工作,但在真实手机中不起作用

时间:2015-07-05 19:07:48

标签: android

我的APP是服务器和客户端之间的语音聊天。客户端运作良好。但是服务器端不能在真实手机上工作,而是在模拟器中工作。

它有时没有显示错误。

我的代码有什么问题?

import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


@TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") public class MainActivity extends Activity {


private Button receiveButton,stopButton;
private TextView receive_label;
private EditText port;
public static DatagramSocket socket;
private AudioTrack speaker;
private int port_num=50005;



//private int sampleRate =8000;//Integer.parseInt(audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));   
private int channelConfig =  AudioFormat.CHANNEL_OUT_MONO;    
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;       
int minBufSize=4096;

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);

    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);

   //AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
  //  sampleRate =Integer.parseInt( audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
}


private final OnClickListener stopListener = new OnClickListener() {

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

    }

};


private final OnClickListener receiveListener = new OnClickListener() {

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

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

    }

};

public void startReceiving() {

    Thread receiveThread = new Thread (new Runnable() {

        @Override
        public void run() {

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


                  byte[] buffer = new byte[1024];


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

                      minBufSize = 4096;//AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
                      if (minBufSize != AudioRecord.ERROR_BAD_VALUE) {

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

                          speaker.play();
                      }
                  }


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


                            while(status == true) {

                                  DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
                                  socket.receive(packet);
                                  Log.d("VR", "Packet Received");

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

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

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




                }


    });
    receiveThread.start();
}}

给我最好的帮助

1 个答案:

答案 0 :(得分:1)

您需要在同一局域网中运行这两个应用