В настоящее время я разрабатываю приложение, которое должно помочь вам научиться читать заметки.Поэтому я хочу подключить свое цифровое пианино и получать миди-сигналы.
К сожалению, я не могу заставить его работать.Это официальная ссылка на API
https://developer.android.com/reference/android/media/midi/package-summary
Я использую класс GameView для рисования на холсте.Я установил экземпляр MidiManager
MidiManager m = (MidiManager)context.getSystemService(Context.MIDI_SERVICE);
Но когда я пытаюсь использовать метод
m.registerDeviceCallback(new MidiManager.DeviceCallback() {
public void onDeviceAdded( MidiDeviceInfo info ) {
...
}
public void onDeviceRemoved( MidiDeviceInfo info ) {
...
}
});
и подставляю точки для некоторого кода, я получаю сообщение об ошибке
registerDeviceCallback в MidiManager не может быть применен к DeviceCallback
Я также обнаружил, что класс MidiManager сам по себе имеет 29 ошибок (без редактирования)
Ядовольно плохо знакомы с Java и Android Studio и не могут найти учебники по этому вопросу.
Это мой класс GameView
package com.maiergames.gameprototype;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.midi.MidiDeviceInfo;
import android.media.midi.MidiManager;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.LinkedList;
public class GameView extends SurfaceView implements SurfaceHolder.Callback {
private MainThread thread;
private Bitmap line;
private Scanner scanner;
private InstanceCreator instanceCreator;
private Bitmap s_scanner;
private boolean test = false;
MidiManager m;
static LinkedList<GameObjects> registeredObjects;
@RequiresApi(api = Build.VERSION_CODES.M)
public GameView(Context context) {
super (context);
getHolder().addCallback(this);
thread = new MainThread(getHolder(), this);
setFocusable(true);
s_scanner = BitmapFactory.decodeResource(context.getResources(), R.drawable.scanner);
//Initial Object-creation
registeredObjects = new LinkedList<>();
scanner = new Scanner(s_scanner, 500, 100);
registeredObjects.add(scanner);
instanceCreator = new InstanceCreator(context, 1920, 100);
registeredObjects.add(instanceCreator);
m = (MidiManager)context.getSystemService(Context.MIDI_SERVICE);
line = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.lines), 1920, 491, true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int screenWidth, int screenHeight) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.setRunning(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
while (retry) {
try {
thread.setRunning(false);
thread.join();
} catch(InterruptedException e) {
e.printStackTrace();
}
retry = false;
}
}
public void step(){
for (int i = 0; i < registeredObjects.size(); i++) {
GameObjects tempObj = registeredObjects.get(i);
tempObj.step();
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
canvas.drawColor(-1);
canvas.drawBitmap(line, 0, 300, null);
if (canvas !=null) {
for (int i = 0; i < registeredObjects.size(); i++) {
GameObjects tempObj = registeredObjects.get(i);
tempObj.draw(canvas);
}
}
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(100);
m.registerDeviceCallback(new MidiManager.DeviceCallback() {
public void onDeviceAdded( MidiDeviceInfo info ) {
test = true;
}
public void onDeviceRemoved( MidiDeviceInfo info ) {
test = false;
}
});
canvas.drawText("My Text", 100, 100, paint);
}
}