小编Kit*_*fer的帖子

为什么http://schemas.android.com/apk/res-auto"仅适用于图书馆项目?

我读到了http://schemas.android.com/apk/res-auto "命名空间问题,这些问题最终在aapt工具的第17版中得到了解决.除了自定义视图可能有属性之外,我不明白为什么要使用CustomView添加为.jar文件时不能使用自定义属性?它只适用于库项目.为什么?

有一些Android项目由于这个问题总是手动添加视图,但为什么运行时似乎无法实例化这些组件?似乎有有效的构造函数(Context context,AttributeSet attrs),如com.jjoe64.graphview.BarGraphView

谁能让我更清楚?

android android-view

5
推荐指数
0
解决办法
4163
查看次数

单元测试Android SMS接收器

我尝试在BroadcastReceiver上编写一个单元测试,当收到短信时会收到通知.它不应该是默认的应用程序.相反,我只需要这个双因素身份验证.对于这种情况,我用[1]创建了一个PDU.

但是当我把它传递给BroadcastReceiver时,发送者的手机nr永远不会被android读取它只是null.正文文本被返回.

@TargetApi(Build.VERSION_CODES.KITKAT)
@Test
public void testOnReceive() throws Exception {
    final byte[] decodedPDU = BaseEncoding.base16().decode(PDU);
    final ReceiveSmsBroadcastReceiver receiveSmsBroadcastReceiver = spy(new ReceiveSmsBroadcastReceiver(true));
    final Intent intent = new Intent();
    intent.putExtra("format",SmsConstants.FORMAT_3GPP);
    intent.putExtra("pdus", new Object[]{decodedPDU});
    intent.setAction("android.provider.Telephony.SMS_RECEIVED");
    intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 1);
    receiveSmsBroadcastReceiver.onReceive(InstrumentationRegistry.getTargetContext(), intent);
Run Code Online (Sandbox Code Playgroud)

在接收器中,我这样做以获取SMSMessage对象:

@TargetApi(Build.VERSION_CODES.KITKAT)
private void getSMSKitKat(final Context context, final Intent intent) {
    final SmsMessage[] messagesFromIntent = Telephony.Sms.Intents.getMessagesFromIntent(intent);
Run Code Online (Sandbox Code Playgroud)

我在这里收到一个SmsMessage数组,正文消息是正确的.但我需要测试我的支票发件人电话号码才能通知用户界面收到短信:但是这里的nr总是为空:

private boolean isCorrectSender(@Nullable final SmsMessage message) {
    if (message == null) {
        return false;
    }
    final String nr = message.getOriginatingAddress();
Run Code Online (Sandbox Code Playgroud)

有人能指出我这里有什么不对吗?

PS:SMSConstants和PhoneConstants都是我从AOSP获取的框架类,因为这些API是非公开的

[1] http://twit88.com/home/utility/sms-pdu-encode-decode

sms junit android unit-testing pdu

5
推荐指数
0
解决办法
553
查看次数

以动画方式移除片段

在应用程序中,我尝试以动画方式删除片段。

transaction.remove(fragmentVideo).remove(fragmentProgressBar).replace(R.id.content_pane_calling, endFragment);
transaction.setCustomAnimations(R.anim.slide_in, R.anim.slide_up);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

框架完全忽略了这一点。Fragment 本身被删除,但视觉效果并不好。任何动画都FragmentTransaction#replace可以很好地配合这些动画。我正在使用SupportLibrary v23.1.

谢谢你的协助 :)

android android-animation android-fragments

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

android build.gradle.kts 风格的实现

我正在将我的转换build.gradlebuild.gradle.ktsDSL。到目前为止,转换很顺利。但在我之前使用过的 groovy 中,当涉及到风味依赖时,我陷入了困境:

nameofflavourImplementation  "some.dependency:1.0.0"
Run Code Online (Sandbox Code Playgroud)

我读了很多关于如何做到这一点的内容,但没有运气,例如:

val nameofflavour by configurations.creating
nameofflavour(group="",name="some.dependency:1.0.0",ext = "aar")
Run Code Online (Sandbox Code Playgroud)

这会导致配置未知的编译错误。

我使用 gradle:6.4.1

编辑:

productFlavors {
    create("nameofflavour") {
        dimension = "full"
        applicationId = "com.someid.android"
    }
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我吗?

android android-gradle-plugin gradle-kotlin-dsl

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

BottomSheetDialogFragment.viewBinding

我很难在BottomSheets上为ViewBinding做一个属性委托。

一般的想法与此类似

对于片段我使用像这样

fun <T : ViewBinding> Fragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)
Run Code Online (Sandbox Code Playgroud)

在作为 Fragments 的 BottomSheetsDialogFragments 上,它不接受委托。

fun <T : ViewBinding> BottomSheetDialogFragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)
Run Code Online (Sandbox Code Playgroud)

BottomSheets 的生命周期与常规 Fragments 相同,所以我不希望有任何问题。

任何人都想出了一个解决方案?

android android-viewbinding

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

Kotlin 密封类和类型推断

我使用密封类向客户端代码报告成功或错误:

sealed class Result<out T : Any> {
    data class Success<out T : Any>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
}
Run Code Online (Sandbox Code Playgroud)

但是我坚持使用它来编译最简单的单元测试:

    val error = Result.Error(IOException("message"))
    assertThat(error, instanceOf(Result.Error::class.java))
Run Code Online (Sandbox Code Playgroud)

我收到消息:类型推断失败。没有足够的信息来推断 fun instanceOf(type : Class<*>) 中的参数 T:匹配器!

看起来我在 Kotlin 中遗漏了一些重要的东西。

谢谢你的协助!

unit-testing kotlin sealed-class

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