标签: android-api-levels

如何定位多个API级别?

我希望在两个独立的API级别上使用Android的Camera.open()方法.首先是API级别7,它是2.1和更高,第二个是2.3.3和2.3.4,它们是API级别9.

在API级别7和8上,Camera.open方法不接受任何参数.在API级别9及更高级别,摄像机采用整数参数,为其提供要使用的cameraId.

如何在同一代码中定位两个API级别?与此伪代码类似的东西:

Camera lCamera;
if (Platform.APILevel < 7){
  lCamera.open();
}else { 
  lCamera.open(0);
}
Run Code Online (Sandbox Code Playgroud)

android android-camera android-api-levels

2
推荐指数
1
解决办法
5102
查看次数

了解Android API级别

Jelly Bean已经问世,它们有一些相当不错的功能.我的问题是,我希望尽可能多地设备目标,但同时拥有一个可以使用最高API级别的所有功能的应用程序.

所以说例如我有这个

<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="16"/>
Run Code Online (Sandbox Code Playgroud)

我在API 16上构建我的应用程序.有没有办法限制代码的某些部分,只有在运行能够运行它的设备时才运行?例如,如果我想要NFC,那么只有姜饼设备及以上才能使用该功能,否则froyo down甚至不会看到该功能.

android android-api-levels

2
推荐指数
1
解决办法
3109
查看次数

如何获得api小于19的Drawable的alpha值

我的Activity中有一个drawable对象.setAlpha()for drawable在API级别1 getAlpha()中引入,但在API级别19(KitKat)中引入.是否有任何替代API或支持库来获取drawable的alpha/opacity值.

而且我还有NineOldAndroids库,但getAlpha()仅适用于VIEWS.

android alpha android-drawable android-api-levels

2
推荐指数
2
解决办法
1245
查看次数

可以使用Api 23(6.0)进行编译并维护旧的权限系统(安装时)吗?

我在官方的android博客中引用了这个:

权限更改 使用Marshmallow,权限已从安装时移至运行时.这是SDK 23+的强制性更改,这意味着它将影响所有开发人员和所有针对Android 6.0的应用程序.

所以...如果您使用Android 6.0(api 23)进行编译但是您的目标是Android 4.4(api 20),则可以保留旧的权限系统吗?

我的意思是这样做:

    compileSdkVersion 'Google Inc.:Google APIs:23'
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 20
    }
Run Code Online (Sandbox Code Playgroud)

我现在的项目的必要条件是维护旧的权限系统并定位sdk版本20(因为我需要维护旧的通知系统,如果你的目标sdk版本高于20,你必须使用新的通知系统).所以...如果我的目标是sdk版本20,我可以使用Api 23进行编译并维护旧的权限系统吗?

谢谢

android android-build android-gradle-plugin android-api-levels

2
推荐指数
1
解决办法
2012
查看次数

Android:无法在非静态方法中设置getContext() - 需要API级别23

下面是一些从非静态方法调用的源代码.我收到了错误

"调用需要API级别23(当前最小值为15); android.app.Fragment#getContext"

android.content.Context context = (Context) getContext();
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得上下文对象?

在object explorer> Gradle Scripts> build.gradle下,我看到了这一点.看起来像版本23给我.我在寻找正确的位置吗?

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.test.test"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:support-v4:23.2.1'
}
Run Code Online (Sandbox Code Playgroud)

看起来我有Android Studio 1.5.1.我刚刚在Android Studio中选择了SettingsActivity项目模板.并为该默认代码添加了一个类.

android-studio android-api-levels

2
推荐指数
2
解决办法
4035
查看次数

布局-开始-结束,左右概念

我对以下属性的使用有点困惑。

> android:layout_marginRight and   android:layout_marginEnd
> android:layout_marginLeft and android:layout_marginStart
> android:layout_toLeftOf and android:layout_toStartOf
> android:layout_toRightOf and android:layout_toEndOf
> android:layout_gravity="right|end"
> android:layout_gravity="left|start"
Run Code Online (Sandbox Code Playgroud)

以下是我提到的一些事实。如果我错了,请纠正我。

  • 为了支持 Ltr 和 Rtl 布局并支持 api 级别 17 之前的版本,建议将上述属性始终成对放置。

  • “开始”和“结束”概念是在 API 级别 17 中添加的,将
    优先用于 api 级别>=17 的 Ltr 设备,“右”和“左”概念将优先用于 api 级别 <17 的 Ltr 设备

  • 如果我们的应用程序 minskdversion >=17 那么我们可以忽略“right”和
    “left”属性而只使用“start”和“end”属性

  • “开始”和“结束”概念在所有 Rtl 设备中优先

另外,我想知道如果我成对添加上述属性,对性能/优化是否有任何不利影响,例如-

 <TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="right|end"
     android:layout_marginRight="@dimen/dp10"
     android:layout_marginEnd="@dimen/dp10"
     android:layout_marginLeft="@dimen/dp10"
     android:layout_marginStart="@dimen/dp10"
     android:layout_toLeftOf="@+id/bar"
     android:layout_toStartOf="@+id/bar"
     />
Run Code Online (Sandbox Code Playgroud)

layout android android-layout android-view android-api-levels

2
推荐指数
1
解决办法
4484
查看次数

Kotlin的范围低于API 21

我想存储键值对< 4.1, 29..35 >,我可以用它来做HashMap<Double, Range<Int>>:

val womanMap: HashMap<Double, Range<Int>> = hashMapOf()

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
fun createMap() {
    //This both requires API 21
    val range = Range(29,35)
    womanMap[4.6] = Range.create(29,35)
} 
Run Code Online (Sandbox Code Playgroud)

如何在API级别21下执行此操作?

android kotlin android-api-levels

2
推荐指数
1
解决办法
314
查看次数

如何使用android studio开发遗留Android应用程序(api> = 10)?

我正在尝试使用Gingerbread,api 10为我的(非常)旧Android手机开发应用程序.

但是使用android studio作为IDE,问题似乎永远存在:

  • 在项目向导中,仅支持api> = 14
  • 所以我选择14并希望稍后改变
  • 我将build.gradle(:app)中的minSdkVersion更改为10 - > minSdkVersion 10 cannot be smaller than version 14 declared in library
  • 所以我implementation 'com.android.support:appcompat-v7:26.1.0'改为implementation 'com.android.support:appcompat-v7:25.1.0'
  • 我收到错误¹有些生成的gradle chache文件"values-v14.xml"缺少资源

......这就是我不知道如何继续下去的观点

正如我所想,这不可能是真的,一个项目抛出了manny错误,我没有创建一个单独的类并且没有编写一行代码,我尝试从命令行构建.

它有效,但我习惯了IDE功能,不喜欢错过它们.所以我的问题是:

如何使用android studio为api级别开发一个简单的Android应用程序?
是否有指导将项目安装到api 10?

我是否处于"正确"的道路上?

是否有一个api 10级应用程序的骨架项目,我可以导入(好像我可以在项目向导中选择api 10)?

我知道原因,谷歌不再支持api <14了.

我仍然不明白为什么我不能使用我完全健康的硬件.
我仍然希望能够为我的旧手机编写一个简单的应用程序.

¹错误日志:

Information:Gradle tasks [:app:assembleDebug]
/home/aik/.gradle/caches/transforms-1/files-1.1/appcompat-v7-25.1.0.aar/2ab2d76d88a035b2d8a733b1b9a020a8/res/values-v14/values-v14.xml
Error:(8, 5) error: style attribute 'android:attr/textAllCaps' not found.
Error:resource android:style/TextAppearance.Material not found.
Error:resource android:style/TextAppearance.Material.Body1 not found.
Error:resource android:style/TextAppearance.Material.Body2 not found.
/home/aik/test_api10/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values-v14/values-v14.xml
Error:(5) style attribute 'android:attr/textAllCaps' not found.
Error:resource android:style/TextAppearance.Material.Button not …
Run Code Online (Sandbox Code Playgroud)

android android-hardware android-studio android-api-levels

2
推荐指数
1
解决办法
1313
查看次数

当我将 targetSDK 设置为 API 30 后,我的 Android 应用程序无法正常工作;我如何找出原因?

Google称,从 2021 年 8 月起,所有新的 Google Play 应用程序除了派生为 Android App Bundle 外,还需要以 API 30 为目标。此外,从 2021 年 11 月开始,即使是应用程序更新也需要符合要求。

因此,我将我的应用程序从目标 API 29 更新到 API 30,并且某些功能出现问题。我如何找出原因?从Google 给出的更改列表来看,这一点并不明显,因为这不仅仅是检查某些已弃用的 API 是否正在使用的问题。

理想情况下,如果 Android Studio 可以提供一种方法来查看 API 30 中的功能如何影响我的应用程序行为,那就太酷了。

android android-api-levels android-api-30

2
推荐指数
1
解决办法
3061
查看次数

调用需要 API 级别 24 java.util.comparator

使用 Comparator 时出现 api 级别错误,但是当我添加 @RequiresApi(N) 注释时,错误得到解决。 错误棉绒

问题是添加 @RequiresApi(N) 注释后,此应用程序无法在低于 24 的 api 级别运行,我在 API 23 手机上收到此错误 -

 Process: com.example.chatapp, PID: 13778
java.lang.NoClassDefFoundError: adapters.chatPageAdapter$$ExternalSyntheticLambda0
    at adapters.chatPageAdapter.onBindViewHolder(chatPageAdapter.java:59)
    at adapters.chatPageAdapter.onBindViewHolder(chatPageAdapter.java:25)
    at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
    at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
    at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
    at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
    at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
    at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
Run Code Online (Sandbox Code Playgroud)

那么,有什么方法可以使用这个方法,甚至可以在 23 以下的 api 上运行应用程序吗?

构建.Gradle -

android {
    compileSdk 30

buildFeatures {
    viewBinding true
}

defaultConfig {
    applicationId "com.example.chatapp"
    minSdk 23
    targetSdk 30
    versionCode 1
    versionName "1.0" …
Run Code Online (Sandbox Code Playgroud)

java android android-api-levels

2
推荐指数
1
解决办法
1766
查看次数