简体   繁体   English

使用 JavaOSC 向 Android 发送/接收 OSC 消息

[英]send/receive OSC messages to Android with JavaOSC

I'm trying to write sample Android application that allows to send and receive OSC messages using JavaOSC library.我正在尝试编写允许使用 JavaOSC 库发送和接收 OSC 消息的示例 Android 应用程序。 In the example we are sending the current value of a simple Android seekBar with OSC message.在示例中,我们使用 OSC 消息发送一个简单的 Android seekBar 的当前值。

The LogCat says: LogCat 说:

09-03 04:56:25.695: I/System.out(1235): can not send

Here is my sample code, unfortunately it does not work (it seems that i have an exception while trying to send message).这是我的示例代码,不幸的是它不起作用(似乎我在尝试发送消息时遇到了异常)。 Maybe someone knows what is it wrong here?也许有人知道这里有什么问题?

I'm totally new in Android dev., thank's for all advices...我是 Android 开发的新手,感谢所有建议...

 package com.remote.secondtest;

import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Date;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;





public class MainActivity extends Activity implements OnSeekBarChangeListener{

    private SeekBar myBar;
    private TextView textProgress, textAction;
    public OSCPortOut sender = null;
    private OSCPortIn  receiver;
    public InetAddress targetIP;
    int port = 5001;
    protected int sliderValue;


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.myscreen);

        myBar = (SeekBar)findViewById(R.id.seekBar1);
        myBar.setOnSeekBarChangeListener(this);        
        textProgress = (TextView)findViewById(R.id.textViewProgress);
        textAction = (TextView)findViewById(R.id.textViewAction);

    } 

    public void setConnection(){
        try {
            targetIP = InetAddress.getByName("192.168.0.104");
            //targetIP = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {          
            e.printStackTrace();        }        

        try {
            sender = new OSCPortOut(targetIP, 4444); //------set up outgoing ------
        } catch (SocketException e) {
            e.printStackTrace();
        }

        /*try {                                     //------set up incoming-------
            receiver = new OSCPortIn(4444);
        } catch (SocketException e) {
            e.printStackTrace();
        } */ 

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    } 


    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        textProgress.setText("The value is: " + progress);
        textAction.setText("changing");

        sliderValue = progress;
        sendMyOscMessage();
        //receiveMyOscMessage();
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {     
        textAction.setText("starting to track touch");

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        seekBar.setSecondaryProgress(seekBar.getProgress());
        textAction.setText("ended tracking touch");     

    }

    public void sendMyOscMessage(){
        Object args [] = new Object[2];
        args[0] = "Current_Value_is: ";
        args[1] = sliderValue;
        OSCMessage msg = new OSCMessage("/test_from_device", args);

        try {
            sender.send(msg);
            System.out.println("OSC message sent!");
            System.out.println(args[0].toString() + args[1]);
        } catch (Exception e) {
            System.out.println("can not send");
            //e.printStackTrace();
        }

    }

    /*public void receiveMyOscMessage(){
        OSCListener myListener = new OSCListener() {

            @Override
            public void acceptMessage(Date time, OSCMessage message) {

                System.out.println("myMessage_received!");              
                //Object [] args = message.getArguments();
                //String myTitle = args[0].toString();
                //int currentValue = (Integer)args[1];
            }
        }; 

        receiver.addListener("/test_to_device", myListener);
        receiver.startListening();

    }*/


}

UPD: the OSCMessage constructor was deprecated but after i modified it for a valid constructor there is no changes... UPD:不推荐使用 OSCMessage 构造函数,但在我为有效的构造函数修改它之后,没有任何更改...

OSCMessage msg = new OSCMessage();
    msg.setAddress("192.168.0.104");
    msg.addArgument(args);

Between a lot of android errors log says:在很多android错误日志之间说:

09-03 07:56:00.794: E/AndroidRuntime(2408): FATAL EXCEPTION: main 09-03 07:56:00.794: E/AndroidRuntime(2408): java.lang.NullPointerException 09-03 07:56:00.794: E/AndroidRuntime(2408): at com.remote.secondtest.MainActivity.sendMyOscMessage(MainActivity.java:132) 09-03 07:56:00.794: E/AndroidRuntime(2408): at com.remote.secondtest.MainActivity.onProgressChanged(MainActivity.java:93) 09-03 07:56:00.794: E/AndroidRuntime(2408): at android.widget.SeekBar.onProgressRefresh(SeekBar.java:91) 09-03 07:56:00.794: E/AndroidRuntime(2408): 致命异常: main 09-03 07:56:00.794: E/AndroidRuntime(2408): java.lang.NullPointerException 09-03 07:594:0 E/AndroidRuntime(2408): 在 com.remote.secondtest.MainActivity.sendMyOscMessage(MainActivity.java:132) 09-03 07:56:00.794: E/AndroidRuntime(2408): 在 com.remote.secondtest.MainActivity.onProgressChanged (MainActivity.java:93) 09-03 07:56:00.794: E/AndroidRuntime(2408): 在 android.widget.SeekBar.onProgressRefresh(SeekBar.java:91)

You need permissions to access Internet.您需要访问 Internet 的权限。

Since the line numbers don't match your errors i can't be sure but I'm guessing this is the most common error, leading to "can not send".由于行号与您的错误不匹配,我无法确定,但我猜这是最常见的错误,导致“无法发送”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM