我决定为Android制作我的最低API版本21,但这是否意味着再也不使用AppCompat了?只需使用普通的Material Design /没有AppCompat/etc?
setAlpha对ViewGroupAPI级别14(ICS)-19(KitKat)中的实例没有影响,即使它是在API级别11中引入的.任何想法为什么?
我甚至尝试过使用支持库,但这也不起作用.
例:
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
ViewGroup view = (ViewGroup) layoutInflater.inflate(R.layout.my_layout, null);
view.setAlpha(0.5f);
Run Code Online (Sandbox Code Playgroud)
它适用于API级别21+,但不适用于API级别14-19.
PS,我还没有测试过以下API级别14.
有没有办法使以下代码与较低的API级别兼容:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:attr/selectableItemBackground"/>
<item android:gravity="bottom">
<shape android:shape="rectangle">
<size android:height="1px"/>
<solid android:color="#ccc"/>
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
部分:android:drawable="?android:attr/selectableItemBackground"产生此消息:
在XML drawable中使用主题引用需要API级别21(当前最小值为15)
我面临改造对象字段的问题。例如:我有对象名称标准,它有20 个字段,不,我只想在 API 调用时发送前4 个字段,其余所有字段在 api 调用时都应该被忽略。
以下是我的对象:
public class Criteria {
@SerializedName("mlsp_id")
@Expose
private String mlspId;
@SerializedName("listing_key")
@Expose
private String listing_key;
@SerializedName("limit")
@Expose
private String limit;
@SerializedName("add_to_log")
@Expose
private Integer addToLog;
@SerializedName("location")
@Expose
private String location;
@SerializedName("property_type")
@Expose
private List<String> propertyType = null;
@SerializedName("price")
@Expose
private Price price;
@SerializedName("beds")
@Expose
private Beds beds;
@SerializedName("baths")
@Expose
private Baths baths;
@SerializedName("floor_area")
@Expose
private FloorArea floorArea;
@SerializedName("lot_size")
@Expose
private LotSize lotSize;
@SerializedName("year_built")
@Expose
private YearBuilt yearBuilt; …Run Code Online (Sandbox Code Playgroud) android android-studio retrofit android-api-levels retrofit2
之前我用Android Studio做项目的时候,Activity操作栏标题默认是白色的。我创建了一个新项目,其设置与之前的项目(API 级别 11)相同,但活动标题颜色的默认颜色是黑色。我根本没有改变任何东西,这是一个新项目。我尝试使用样式但没有任何效果。
我曾经构建过 api 级别 19 的 arm64-v8a 库,使用android.toolchain.cmakeAndroid NDK r16b 就像这样。
${CMAKE} \
-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
-DANDROID_NDK=$ANDROID_NDK_HOME \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_NATIVE_API_LEVEL="android-19" \
-DANDROID_STL="c++_shared" \
-DANDROID_CPP_FEATURES="rtti exceptions" \
..
Run Code Online (Sandbox Code Playgroud)
现在我想打包我的 lib 使用conan,它交叉编译 android lib 使用独立工具链。似乎不可能用--arch arm64and制作独立的工具链--api 19,因为以下命令
./make_standalone_toolchain.py --arch=arm64 --api=19 --stl=libc++ --install-dir=./test
Run Code Online (Sandbox Code Playgroud)
将失败并显示错误消息:
19 小于 arm64 的最小平台 (21)
有没有什么办法解决这一问题?
根据官方文档,只能从Android O(API 26)开始动态注册屏幕锁定/解锁事件的BroadcastReceiver(通过在Activity中调用registerReceiver)。在AndroidManifest.xml中注册这些事件不再起作用,因此,当应用程序不运行时(先前已被Android终止或被用户强制关闭),该应用程序将不再能够接收这些事件(ACTION_SCREEN_ON / ACTION_USER_PRESENT)。
帖子中也提到了同样的问题: Android-检测手机解锁事件,而不是屏幕显示
是否还有其他其他可靠且可行的方式来获取屏幕锁定/解锁事件?
通过在应用程序的AndroidManifest .xml文件中注册ACTION_USER_PRESENT,尝试隐式广播以接收屏幕锁定/解锁事件。但是根据文档,除了某些例外情况之外,不当广播都是行不通的。您必须在活动类中使用registerReceiver的动态注册来执行此操作。因此,如果该应用被Android操作系统杀死,或者被用户强行停止,则该应用不会收到屏幕锁定/解锁广播。
活动类动态广播接收机
registerReceiver(new PhoneUnlockedReceiver(),
new IntentFilter("android.intent.action.USER_PRESENT"));
public class PhoneUnlockedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(
Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardSecure()) {
//phone was unlocked, add handling here
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序使用带有本机库的库,现在在 Android 11 中由于 fdsan 而崩溃。
我已经联系了库提供商,但他们不会提供解决此问题的新版本库,因此我需要能够以某种方式禁用 fdsan。
我认为解决方案是当我使用 Android 11 或更高版本时调用:
if(android_get_device_api_level()>=30)
android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE);
Run Code Online (Sandbox Code Playgroud)
但由于错误,我无法编译:
使用未声明的标识符“android_fdsan_set_error_level”
因为这只是在 Android 10 (API 29) 中添加的
所以我的问题是如何在我的项目中调用这个函数?我正在为此创建一个特定的 cpp 文件和一个特定的库,所以我需要一些如何让这个库说明它仅适用于 Android 10 或更高版本。cpp 文件或 Android.mk 文件中是否有一些定义,我可以使用这些定义来编译这个特定的库,仅当我的应用程序启动时,我才会从 Android 11 或更高版本中的 Java 调用该库?
背景:我正在使用最低 API 级别 17 制作我的应用程序。
我正在寻找获取文件系统大小的方法,并看到了这一点:
http://developer.android.com/reference/android/os/StatFs.html
但是,许多较新的功能仅在 API 级别 18 向上可用,并且旧版本现已弃用。
我如何正确使用类似http://developer.android.com/reference/android/os/Build.VERSION.html 的东西说,“如果用户的 API 级别是 17,请使用这些函数的弃用版本,但如果API 级别为 18+,使用这些函数的较新版本”?我是否需要以某种方式使用弃用注释?
我有一个问题,当我尝试将我的应用程序上传到谷歌播放控制台,它的API级别必须是26,我的应用程序只是开发了23版本,现在我不知道如何从23更改此API版本到26,使其工作没有错误.
请帮帮我!
api sdk android google-play-developer-api android-api-levels
android ×9
alpha ×1
android-file ×1
android-ndk ×1
api ×1
arm64 ×1
cmake ×1
conan ×1
filesystems ×1
retrofit ×1
retrofit2 ×1
sdk ×1
storage ×1
styles ×1
viewgroup ×1
xml-drawable ×1