如何在android中用smack发送音频文件

如何在android中用smack发送音频文件,android,audio,smack,asmack,Android,Audio,Smack,Asmack,如何在android系统中发送类似smack的音频文件whatsapp,最好的方法是什么 还有如何发送视频和照片? 这是最好的方法吗 在android asmack中发送文件的最佳方式是什么 public void send() { configureProviderManager(connection); FileTransferNegotiator.setServiceEnabled(connection, true); FileTransferManager manager = new

如何在android系统中发送类似smack的
音频文件
whatsapp
,最好的方法是什么

还有如何发送视频和照片? 这是最好的方法吗

在android asmack中发送文件的最佳方式是什么

public void send()
{

configureProviderManager(connection);

FileTransferNegotiator.setServiceEnabled(connection, true);
FileTransferManager manager = new FileTransferManager(connection);
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("xxxxx@jabber.ccc.de/Smack");

File file = new File("/sdcard/DCIM/Camera/1385869353956.jpg");
try {
    Log.d("file sending",file.getAbsolutePath()+" "+file.getName());
    configureProviderManager(connection);
   transfer.sendFile(file, "test_file");
} catch (XMPPException e) {
   e.printStackTrace();
}

while(!transfer.isDone()) {
       if(transfer.getStatus().equals(Status.error)) {
          System.out.println("ERROR!!! " + transfer.getError());
       } else if (transfer.getStatus().equals(Status.cancelled)
                        || transfer.getStatus().equals(Status.refused)) {
          System.out.println("Cancelled!!! " + transfer.getError());
       }
       try {
          Thread.sleep(1000L);
       } catch (InterruptedException e) {
          e.printStackTrace();
       }
    }

    if(transfer.getStatus().equals(Status.refused))
             System.out.println("refused  " + transfer.getError());
    else if( transfer.getStatus().equals(Status.error))
         System.out.println(" error " + transfer.getError());
    else if(transfer.getStatus().equals(Status.cancelled))
       System.out.println(" cancelled  " + transfer.getError());
    else
       System.out.println("Success");


}

您可以根据自己的要求进行更改

public class MyFileTransfer  extends SmackTest<XMPPTCPConnection> {

    public static void main(String args[]) throws Exception {
        SmackTest<XMPPTCPConnection> test = new MyFileTransfer();
        test.runTest();
    }

    private static final byte[] dataToSend = StringUtils.randomString(1024 * 4 * 3).getBytes();
    private static byte[] dataReceived;

    @Override
    protected void runTestSubclass() throws SmackException, IOException,
            XMPPException, InterruptedException, KeyManagementException, NoSuchAlgorithmException {
        FileTransferNegotiator.IBB_ONLY = true;
        XMPPTCPConnectionConfiguration.Builder conf = XMPPTCPConnectionConfiguration.builder();
        conf.setServiceName(SERV);
        conf.setUsernameAndPassword(USER, PASS);
        conf.setSecurityMode(SecurityMode.disabled);
        conf.setCompressionEnabled(true);
        TLSUtils.acceptAllCertificates(conf);
        conf.setResource("sender");

        connection = new XMPPTCPConnection(conf.build());
        connection.connect();
        connection.login();

        conf.setResource("receiver");
        XMPPTCPConnection connection2 = new XMPPTCPConnection(conf.build());
        connection2.connect();
        connection2.login();

        FileTransferManager ftm1 = FileTransferManager.getInstanceFor(connection);
        FileTransferManager ftm2 = FileTransferManager.getInstanceFor(connection2);

        ftm2.addFileTransferListener(new FileTransferListener() {
            @Override
            public void fileTransferRequest(FileTransferRequest request) {
                IncomingFileTransfer ift = request.accept();
                try {
                    InputStream is = ift.recieveFile();
                    ByteArrayOutputStream os = new ByteArrayOutputStream();
                    int nRead;
                    byte[] buf = new byte[1024];
                    while ((nRead = is.read(buf,  0, buf.length)) != -1) {
                        os.write(buf, 0, nRead);
                    }
                    os.flush();
                    dataReceived = os.toByteArray();
                } catch (SmackException | IOException | XMPPErrorException e) {
                    e.printStackTrace();
                }
                if (Arrays.equals(dataToSend, dataReceived)) {
                    System.out.println("Received data matches send data. \\o/");
                } else {
                    System.err.println("Recieved data DOES NOT match send data. :(");
                }
            }
        });

        OutgoingFileTransfer oft = ftm1.createOutgoingFileTransfer(XmppStringUtils.completeJidFrom(USER, SERV, "receiver"));
        oft.sendStream(new ByteArrayInputStream(dataToSend), "hello.txt", dataToSend.length, "A greeting");
        outerloop: while (!oft.isDone()) {
            switch (oft.getStatus()) {
                case error:
                    System.out.println("Filetransfer error: " + oft.getError());
                    break outerloop;
                default:
                    System.out.println("Filetransfer status: " + oft.getStatus() + ". Progress: " + oft.getProgress());
                    break;
            }
            Thread.sleep(1000);
        }

        connection.disconnect();
        connection2.disconnect();
        Thread.sleep(1000);
    }
}
公共类MyFileTransfer扩展了SmackTest{
公共静态void main(字符串args[])引发异常{
SmackTest测试=新建MyFileTransfer();
test.runTest();
}
私有静态最终字节[]dataToSend=StringUtils.randomString(1024*4*3.getBytes();
接收到私有静态字节[]数据;
@凌驾
受保护的void runTestSubclass()引发SmackException、IOException、,
XMPPException、InterruptedException、KeyManagementException、NoSuchAlgorithmException{
FileTransferCongregator.IBB_ONLY=true;
XMPPTCPConnectionConfiguration.Builder conf=XMPPTCPConnectionConfiguration.Builder();
conf.setServiceName(SERV);
conf.setUserName和Password(用户,密码);
conf.setSecurityMode(SecurityMode.disabled);
conf.setCompressionEnabled(true);
TLSUtils.验收证书(conf);
conf.setResource(“发送方”);
连接=新的XMPPTCPConnection(conf.build());
connection.connect();
connection.login();
conf.setResource(“接收方”);
XMPPTCPConnection connection2=新的XMPPTCPConnection(conf.build());
connection2.connect();
connection2.login();
FileTransferManager ftm1=FileTransferManager.getInstanceFor(连接);
FileTransferManager ftm2=FileTransferManager.getInstanceFor(连接2);
ftm2.addFileTransferListener(新的FileTransferListener(){
@凌驾
公共无效fileTransferRequest(fileTransferRequest请求){
IncomingFileTransfer ift=request.accept();
试一试{
InputStream=ift.receiveFile();
ByteArrayOutputStream os=新建ByteArrayOutputStream();
国际nRead;
字节[]buf=新字节[1024];
而((nRead=is.read(buf,0,buf.length))!=-1){
写操作系统(buf,0,nRead);
}
os.flush();
dataReceived=os.toByteArray();
}捕获(SmackException | IOException | XMPPErrorException){
e、 printStackTrace();
}
if(Arrays.equals(dataToSend,dataReceived)){
System.out.println(“接收的数据与发送的数据匹配。\\o/”;
}否则{
System.err.println(“接收到的数据与发送数据不匹配:”;
}
}
});
OutgoingFileTransfer oft=ftm1.createOutgoingFileTransfer(XmppStringUtils.completeJidFrom(用户、服务,“接收者”);
oft.sendStream(新的ByteArrayInputStream(dataToSend),“hello.txt”,dataToSend.length,“一个问候语”);
outerloop:while(!oft.isDone()){
开关(oft.getStatus()){
案例错误:
System.out.println(“文件传输错误:+oft.getError());
断开外环;
违约:
System.out.println(“文件传输状态:+oft.getStatus()+”。进度:+oft.getProgress());
打破
}
睡眠(1000);
}
连接断开();
连接2.断开连接();
睡眠(1000);
}
}

您能发送文件吗?