行 35674: frameworks/base/media/java/android/media/MediaPlayer.java:670: error: constructor PlayerBase in class PlayerBase cannot be applied to given types; 行 35680: frameworks/base/media/java/android/media/MediaPlayer.java:672: error: call to this must be first statement in constructor怎么解决
时间: 2023-07-19 10:28:05 浏览: 81
这是由于 `MediaPlayer` 类的构造函数中调用了 `PlayerBase` 类的构造函数,并传递了错误的参数。同时,`MediaPlayer` 类的构造函数中还违反了调用其他构造函数时的规则,即调用其他构造函数的语句必须放在构造函数的第一行。因此,需要修改 `MediaPlayer` 类的构造函数,以解决这两个问题。
具体来说,可以在 `MediaPlayer` 类的构造函数中先调用 `PlayerBase` 类的构造函数,并传递正确的参数,然后再调用其他的初始化方法。由于在调用其他构造函数时,必须将该语句放在构造函数的第一行,因此需要将 `this` 关键字移到构造函数的第一行,如下所示:
```
public MediaPlayer() {
this(AudioAttributes.Builder().build(), 0);
}
public MediaPlayer(AudioAttributes attrs, int defStyleAttr) {
super(attrs, defStyleAttr);
// 其他初始化方法
}
```
这里新增了一个带有两个参数的构造函数,用于在 `MediaPlayer` 类的无参构造函数中调用。在新的构造函数中,首先调用了 `PlayerBase` 类的构造函数,并传递了一个 `AudioAttributes` 对象和一个整数值作为参数。然后再调用其他的初始化方法。这样可以保证 `MediaPlayer` 类的构造函数符合语法规则,同时也传递了正确的参数到 `PlayerBase` 类的构造函数中,避免了编译错误的问题。
阅读全文