public class TaskMiActivity extends AppCompatActivity {    // private MidiPianoLayout midiPianoLayout;    TextView tv_tv1, tv_tv2;    Button btn_connect;        @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                setContentView(R.layout.activity_task_mi);        tv_tv1 = findViewById(R.id.tv_tv1);        tv_tv2 = findViewById(R.id.tv_tv2);        fl_key = findViewById(R.id.fl_key);        btn_connect = findViewById(R.id.btn_connect);  btn_connect.setOnClickListener(new View.OnClickListener() {           @Override           public void onClick(View v) {               openMidi();           }       });    }    void openMidi() {        MidiManager m = (MidiManager) getSystemService(Context.MIDI_SERVICE);        MidiDeviceInfo[] infos = m.getDevices();        if (infos != null && infos.length > 0) {            int num = 0;            for (int i = 0; i < infos.length; i++) {                if (infos[i].getOutputPortCount() != 0) {                    num = i;                }            }            m.openDevice(infos[num], new MidiManager.OnDeviceOpenedListener() {                @Override                public void onDeviceOpened(MidiDevice device) {                    if (device == null) {                                                Toast.makeText(getBaseContext(), "连接设备失败", Toast.LENGTH_SHORT).show();                    } else {                        MidiDeviceInfo.PortInfo[] ports = device.getInfo().getPorts();                        for (int j = 0; j < ports.length; j++) {                            if (ports[j].getType() == MidiDeviceInfo.PortInfo.TYPE_OUTPUT) {                                int outputNum = ports[j].getPortNumber();                                MidiOutputPort midiOutputPort = device.openOutputPort(outputNum);                                if (midiOutputPort != null) {                                                                        midiOutputPort.connect(new MyReceiver());                                                                        Toast.makeText(getBaseContext(), "连接设备成功", Toast.LENGTH_SHORT).show();                                } else {                                                                        Toast.makeText(getBaseContext(), "连接设备失败", Toast.LENGTH_SHORT).show();                                }                            }                        }                    }                }            }, new Handler(Looper.getMainLooper()));        }    }    class MyReceiver extends MidiReceiver {               public void onSend(final byte[] data, final int offset,                           final int count, final long timestamp) throws IOException {                        runOnUiThread(new Runnable() {                @Override                public void run() {                    if (count == 3) {                        int jw = data[2];                                             tv_tv1.setText("键位:" + jw + "-------" + data[3] + " -----" + offset + "  -----" + count + " ---------" + timestamp);                        Log.e("ContentValues", "键位:" + jw);                        Log.e("ContentValues", "力道:" + data[3]);                        Log.e("ContentValues", "count:" + count);                        Log.e("ContentValues", "offset:" + offset);                        Log.e("ContentValues", "timestamp:" + timestamp);                        StringBuffer sb = new StringBuffer();                        for (int i = 0; i < data.length; i++) {                                                       sb.append("key:" + i + "<-->");                            sb.append("value:" + data[i]);                                                    }                                              tv_tv2.setText("-----" + "所有数据:" + sb.toString());                                          }                }            });        }    }}

更多相关文章

  1. 如何通过PC端连接Android设备进行adb调试
  2. Android Training - 支持不同的设备
  3. Android - 支持不同的设备

随机推荐

  1. Android学习笔记2---多界面切换
  2. ListView@常用属性记录
  3. Android Toast&Notification(Part I)
  4. 一个封装好的Android仿Ios ActionSheet控
  5. android构建自定义的视图组件
  6. Android音量调节原理
  7. Android使用第三方SDK——百度地图
  8. Android图形子系统
  9. Android(安卓)WebView 实现JS相互调用 Js
  10. android 闹钟的实现