【问题标题】:Managing Android versions: using different classes for each version管理 Android 版本:为每个版本使用不同的类
【发布时间】:2015-08-04 17:59:11
【问题描述】:

我在我的主要活动中使用这个类:

public class MediaInfo {
    public String name;
    public String label;
    // ... (other String and int fields)
    public MediaSession mSession;
}

在 ArrayList 内:

public class MainActivity extends ActionBarActivity implements AsyncResponse {

    private static final String TAG = "MainActivity";

    ArrayList<MediaInfo> myMediaList;
    private Context mContext;

    public void onCreate(Bundle savedInstanceState) {
        // ...
    }

    // ...
}

我遇到的问题是 MediaSession 是属于 Android API 版本 21 的类,我正在尝试从版本 14 开始制作应用程序。

我希望活动(或类)在版本 = 21 时扩展它,但随后我将不得不声明不同的 ArrayList,而且我不确定我该怎么做。也许这不是最好的方法......

有什么想法吗...?

感谢您的建议

【问题讨论】:

    标签: java android api-versioning


    【解决方案1】:

    我遇到的问题是 MediaSession 是属于 Android API 版本 21 的类,我正在尝试从版本 14 开始制作应用程序。

    查看Android support library,似乎有一个向后兼容的MediaSession版本,称为MediaSessionCompat

    【讨论】:

    • 好的,谢谢,我去找找。无论如何,如果没有兼容版本怎么办?是否可以考虑一个版本的类字段而不考虑其他版本...?
    • 通常情况下,如果它是必不可少的功能,Google 会添加兼容版本。否则,您必须遵循 Yair 的回答并在使用新功能之前检查设备的 API 级别。如果 API 较低,您将不得不使用旧的/不推荐的方式来实现该功能。您可以将更新的功能作为声明变量,只需记住在使用它之前检查 API 级别。希望这对编码有所帮助和快乐!
    【解决方案2】:

    user3829751 的回答在这种情况下看起来不错。

    对于这个一般性问题,我会带你去这个问题:Programmatically obtain the Android API level of a device?

    还要检查@TargetApi 注释。您可以将您的“版本 21”提取到一个方法中,并且仅在版本 21 的运行时调用它。您可以在此处查看示例:https://stackoverflow.com/a/18449951/3032209

    【讨论】:

    • 谢谢你,亚尔。但是,问题不在于我如何获得版本号(您的链接说明了它是多么容易),而是我如何根据版本号管理不同的类。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2019-09-17
    相关资源
    最近更新 更多