小编Sim*_*ays的帖子

即使 WorkManagerInitializer 未在清单中禁用,WorkManager 未初始化异常

我有一个用于WorkManager多个后台任务的应用程序。最近,即使我没有在清单中禁用,由于 WM 未初始化,我在生产日志中看到很多崩溃WorkManagerInitializer

java.lang.IllegalStateException: WorkManager is not initialized properly. The most likely cause is that you disabled WorkManagerInitializer in your manifest but forgot to call WorkManager#initialize in your Application#onCreate or a ContentProvider.
        at androidx.work.WorkManager.getInstance(WorkManager:161)
        ...
Run Code Online (Sandbox Code Playgroud)

WM 文档说

默认情况下,WorkManager 使用内置 ContentProvider 自动初始化自身。ContentProviders 在 Application 对象之前创建和运行,因此在大多数情况下,这允许在代码运行之前设置 WorkManager 单例。

在大多数情况下,有趣的部分是。我想知道在什么情况下它在应用程序启动之前没有正确初始化。

我最初的猜测是我的代码中的错误可能创建了太多的 WM 任务,这些任务需要很长时间才能初始化,但我无法以这种方式重新创建崩溃。

有人以前见过这种行为并且知道这里会发生什么吗?为什么WorkManager应用程序启动前没有初始化?

android android-workmanager

6
推荐指数
1
解决办法
1096
查看次数

组合 BottomSheetScaffold 与工作表上边距

我正在尝试BottomSheetScaffold,但无法弄清楚如何设置纸张的上边距/最小偏移/锚点。

像这样设置工作表:

val scaffoldState = rememberBottomSheetScaffoldState()
BottomSheetScaffold(
    sheetContent = {
        LazyColumn(modifier = Modifier
            .fillMaxSize()
            .padding(10.dp)
        ) {
            items(100) {
                Text(text = "Sheet item $it")
                Spacer(modifier = Modifier.height(10.dp))
            }
        }
    },
    scaffoldState = scaffoldState,
    sheetPeekHeight = 100.dp,
    sheetShape = RoundedCornerShape(10.dp),
    sheetBackgroundColor = Color.Gray
) { innerPadding ->
    Box(
        modifier = Modifier
            .fillMaxSize()
            .padding(innerPadding)
            .background(Color.Green),
        contentAlignment = Alignment.Center
    ) { Text(text = "Content") }
}
Run Code Online (Sandbox Code Playgroud)

结果在应用程序的底部工作表中:

折叠:

扩展:

我正在寻找的是为工作表添加上边距,以便它不会扩展超过此状态。

我知道我可以为工作表内容添加高度,但随后我必须计算height = windowHeight - bottomNavHeight - sheetTopMargin,这感觉比它应该的更复杂。

有没有更简单的方法来设置顶页边距?

android bottom-sheet android-jetpack android-jetpack-compose

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

使用Google应用内结算功能的运营商代码授权失败

我制作了一个使用谷歌应用内结算的Android应用.大多数情况下,这种工作正常,但有些用户似乎未通过运营商结算授权.在这种情况下,我收到一封包含以下文字的电子邮件.

Google order # XXX has been cancelled because carrier billing authorization did 
not succeed for your buyer. The buyer was not charged.
Run Code Online (Sandbox Code Playgroud)

我意识到这意味着什么,问题不在我身边,但我想知道在这种情况下在应用程序中究竟发生了什么.订单是否先通过并稍后取消?在这种情况下谷歌和我的应用程序之间的消息流是什么?

android in-app-billing google-play

5
推荐指数
1
解决办法
641
查看次数

随机调用的联系人 ContentObserver

我正在使用 ContentObserver 来监听联系人数据库中的更改。现在我意识到 onChange() 方法会被随机调用,即使我没有对联系人进行任何更改。我怀疑这在某种程度上与自动联系人同步有关(即使此时联系人没有真正的更改)。

仅当用户对联系人进行实际更改时,才有可能收到通知吗?

谢谢西蒙

public class ContactsObserver extends ContentObserver {
private final static String TAG = ContactsObserver.class.getSimpleName();

private Context ctx;
private List<ContactsChangeListener> listeners = new ArrayList<ContactsChangeListener>();

private ContactsObserver(Context ctx) {
    super(new Handler());
    this.ctx = ctx.getApplicationContext();
    ctx.getContentResolver()
        .registerContentObserver(
                ContactsContract.Contacts.CONTENT_URI,  // uri
                false,                                  // notifyForDescendents
                this);                                  // observer
}

@Override
public void onChange(boolean selfChange) {
    Log.i(TAG, "Contacs change");
    for(ContactsChangeListener l : listeners){
        l.onContactsChange();
    }
}

@Override
public boolean deliverSelfNotifications() {
    return false; // set to true does not change …
Run Code Online (Sandbox Code Playgroud)

android contacts contentobserver

5
推荐指数
1
解决办法
2187
查看次数

撰写具有透明背景的圆形按钮

我正在尝试显示Button圆角和 50% 透明背景。我当前的尝试如下所示:

MaterialTheme {
    Surface(
        modifier = Modifier.fillMaxSize(),
        color = Color.Yellow
    ) {
        Column(modifier = Modifier.padding(10.dp)) {
            Button(
                modifier = Modifier
                    .clip(CircleShape),
                onClick = { },
                colors = ButtonDefaults.buttonColors(backgroundColor = Color.White.copy(alpha = 0.5f))
            ) {
                Text(
                    text = "My Button",
                    textAlign = TextAlign.Center
                )
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果不是很漂亮:

在此输入图像描述

看起来问题在于阴影,但我不确定如何删除它并在整个形状中显示相同的颜色。

android kotlin android-jetpack-compose

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