首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用JavaOSC向Android发送/接收OSC消息

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

Stack Overflow用户
提问于 2013-09-03 08:59:07
回答 1查看 2.4K关注 0票数 1

我正在尝试编写允许使用JavaOSC库发送和接收OSC消息的样例Android应用程序。在本例中,我们将发送带有OSC消息的简单Android seekBar的当前值。

LogCat说:

代码语言:javascript
代码运行次数:0
运行
复制
09-03 04:56:25.695: I/System.out(1235): can not send

下面是我的示例代码,不幸的是它不起作用(似乎我在发送消息时有异常)。也许有人知道这里出了什么问题?

我是Android开发公司的新手,谢谢你的建议.

代码语言:javascript
代码运行次数:0
运行
复制
 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:不推荐使用OSCMessage构造函数,但在我将其修改为有效的构造函数后,没有任何更改.

代码语言:javascript
代码运行次数:0
运行
复制
OSCMessage msg = new OSCMessage();
    msg.setAddress("192.168.0.104");
    msg.addArgument(args);

在大量的android错误日志中说:

09-03 07:56:00.794: E/AndroidRuntime(2408):致命例外:主09-03 :56:00.794: E/AndroidRuntime(2408):java.lang.NullPointerException 09-03 07:56:00.794: E/AndroidRuntime(2408):at com.remote.secondtest.MainActivity.onProgressChanged(MainActivity.java: 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)

EN

回答 1

Stack Overflow用户

发布于 2014-09-12 11:27:45

您需要访问Internet的权限。

由于行号与您的错误不匹配,我无法确定,但我猜这是最常见的错误,导致“无法发送”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18588064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档