小编Bry*_*yan的帖子

How to Use Unsupported Exception for Lower Platform Version

I have a DialogFragment that handles login and fingerprint authentication for my application. This fragment uses two classes that are exclusive to API 23, KeyGenParameterSpec and KeyPermanentlyInvalidatedException. I had been under the impression that I could use these classes, as long as I check the build version before I try to initialize the classes (outlined here):

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    ...
} else {
    ...
}
Run Code Online (Sandbox Code Playgroud)

But it appears that this is not the case. If I try …

android dalvik android-version android-api-levels android-fingerprint-api

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

如何避免让用户下载单独的APK进行帐户管理?

我为我正在开发的两个应用程序创建了一个自定义帐户类型.现在我正在寻找两种应用程序利用这种单一帐户服务的方法.该文件提出以下建议.

一种解决方案是将服务放在一个小的专用APK中.当应用程序希望使用您的自定义帐户类型时,它可以检查设备以查看您的自定义帐户服务是否可用.如果没有,它可以指导用户使用Google Play下载该服务.这可能看起来像是一个很大的麻烦,但与使用您的自定义帐户的每个应用程序重新输入凭据的替代方案相比,它非常容易.

但我不想让我的用户下载一个单独的APK只是为了能够登录.什么是另一个解决方案,允许两个应用程序具有此功能,而没有单独的APK的负担?

android android-authenticator android-account

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

Dagger 2 Build IllegalArgumentException compileDebugJavaWithJavac

我一直在测试Dagger 2,一切都在工作,直到我做了一些重构.现在gradle正在抛出一个IllegalArgumentException,我无法弄清楚我改变了什么,现在导致错误.我没有对gradle文件进行任何更改,这似乎是堆栈跟踪的主要内容:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':mobile:compileDebugJavaWithJavac'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    ...

Caused by: java.lang.IllegalArgumentException
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
    at dagger.internal.codegen.writer.ClassName.peerNamed(ClassName.java:130)
    at dagger.internal.codegen.SourceFiles.membersInjectorNameForMembersInjectionBinding(SourceFiles.java:266)
    at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:194)
    at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:171)
    at dagger.internal.codegen.InjectProcessingStep.process(InjectProcessingStep.java:129)
    at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:228)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
    at com.sun.tools.javac.main.Main.compile(Main.java:523)
    ... 89 more
Run Code Online (Sandbox Code Playgroud)

Dagger也没有生成任何文件,而且之前也是如此.我一直在尝试解决这个问题的每个方法,我可以找到,主要涉及修复gradle文件或清除build文件夹,但到目前为止还没有任何工作.


快速更新(因为我注意到一些上升票); 我从未弄清楚我做错了什么,最后我恢复了旧版本.恢复之后,我再次进行了重构,并且工作正常.当我最初重构代码时,我必须做一些不同的事情,但我不知道它是什么.

如果有人知道可能导致这种情况的原因,我相信它会帮助那些已经或将来会遇到这个问题的人.

android illegalargumentexception dagger-2

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

SwipeRefreshLayout不拦截NestedScrollingChild的MotionEvent

我使用的是NestedScrollWebView(在很大程度上受到影响NestedScrollView),这可以解决许多已知 问题与使用相关联WebViewCoordinatorLayout.

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="enterAlways|scroll|snap">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:titleTextAppearance="@style/TextAppearance.AppCompat.Subhead"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:layout_gravity="bottom"
                android:visibility="gone"
                style="@style/Widget.AppCompat.ProgressBar.Horizontal"/>

        </FrameLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <com.example.app.widget.NestedScrollWebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </android.support.v4.widget.SwipeRefreshLayout>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

这些NestedScrollWebView作品很好用AppBarLayoutenterAlways|scroll|snap滚动标志,但不是很好SwipeRefreshLayout.


我删除了以下行NestedScrollWebView:

setOverScrollMode(WebView.OVER_SCROLL_NEVER);
Run Code Online (Sandbox Code Playgroud)

这样可以确保视图不会显示在滚动指示器上.我想要显示滚动指示符,但即使启用了过度滚动,也不会出现以下情况.


根据我的理解,SwipeRefreshLayout应该拦截导致刷新指示符被拖动的任何触摸事件(基于其实现onInterceptTouchEvent()).SwipeRefreshLayout也拒绝任何requestDisallowInterceptTouchEvent()已启用嵌套滚动的子项; 这是真的NestedScrollWebView.因此,应按 …

android swiperefreshlayout android-touch-event android-nestedscrollview

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

Android Studio模拟器PANIC错误

Android Studio模拟器突然停止工作.当我尝试运行虚拟设备时,我在事件日志中收到以下错误.

模拟器:PANIC:找不到AVD系统路径.请定义ANDROID_SDK_ROOT仿真器:处理完成,退出代码为1

所以我检查了ANDROID_SDK_ROOT环境变量设置的值,它是空的.所以我把它设置为/Users/{username}/Library/Android/sdk基于类似问题的答案 ; 但我仍然得到同样的错误.

我尝试从AVD管理器中删除所有虚拟设备并创建一个新设备(如此处所示),但没有运气.我还尝试卸载并重新安装所有SDK组件包; 我仍然得到同样的错误.

我无法弄清楚发生了什么,或者如何解决它.ANDROID_SDK_ROOT我设置的值可能不正确吗?(我设置的值与我的ANDROID_HOME变量相同,它确实指向包含Android SDK的目录).

我唯一能想到的就是我还没有尝试过卸载并重新安装Android Studio(如果可以的话,我宁愿尽量避免这种情况).


更新

嗯...我删除了有关Android Studio的所有内容.

~/.android
~/.AndroidStudio*
~/Applications/Android \Studio.app
~/Library/Android
~/Library/Application \Support/AndroidStudio*
~/Library/Caches/AndroidStudio*
~/Library/Logs/AndroidStudio*
~/Library/Preferences/AndroidStudio*
~/Library/Preferences/com.android.Emulator.plist
~/Library/Preferences/com.google.android.*
Run Code Online (Sandbox Code Playgroud)

然后重新安装了Android Studio ......我仍然遇到同样的错误.我错过了什么?是什么导致了这个问题?

android android-virtual-device android-emulator android-studio

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

如何使用RxAndroid和Retrofit 2检索响应体?

我正在使用Retrofit 2(beta 4),我希望从使用标准Call响应转向RxAndroid Observable响应.我成功地通过简单的交换Call<List<ExampleObject>>来切换我的大部分呼叫Observable<List<ExampleObject>>.我的一些电话使用Call<okhttp3.ResponseBody>,效果很好,但当我换掉时Call,我遇到了一个错误:

03-03 15:21:44.237 27333-27333/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.app, PID: 27333
        java.lang.IllegalArgumentException: Unable to create call adapter for rx.Observable<okhttp3.ResponseBody>
            for method AuthenticationService.getLoginForm
            at retrofit2.Utils.methodError(Utils.java:119)
            at retrofit2.MethodHandler.createCallAdapter(MethodHandler.java:52)
            at retrofit2.MethodHandler.create(MethodHandler.java:25)
            at retrofit2.Retrofit.loadMethodHandler(Retrofit.java:164)
            at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
            at java.lang.reflect.Proxy.invoke(Proxy.java:393)
            at $Proxy6.getLoginForm(Unknown Source)
            at com.example.app.ui.fragment.LoginFragment.login(LoginFragment.java:214)
            at com.example.app.ui.fragment.LoginFragment.lambda$onContinue$1(LoginFragment.java:168)
            at com.example.app.ui.fragment.LoginFragment.access$lambda$1(LoginFragment.java)
            at com.example.app.ui.fragment.LoginFragment$$Lambda$4.onClick(Unknown Source)
            at android.view.View.performClick(View.java:5204)
            at android.view.View$PerformClick.run(View.java:21153)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) …
Run Code Online (Sandbox Code Playgroud)

android rx-java rx-android retrofit2 okhttp3

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

Android KeyStoreException未知错误

我试图在用户通过Android M指纹API进行身份验证后解密加密文本.我一直在尝试遵循Android安全示例以及KeyGenParameterSpec文档中提供的示例.我已经能够成功地加密与公钥的文本,但是当我打电话cipher.doFinalCipher在使用私有密钥DECRYPT_MODE,我得到一个KeyStoreException"未知错误":

03-15 10:06:58.074 14702-14702/com.example.app E/LoginFragment: Failed to decrypt password
        javax.crypto.IllegalBlockSizeException
            at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:486)
            at javax.crypto.Cipher.doFinal(Cipher.java:1502)
            at com.example.app.ui.fragment.util.LoginFragment.onAuthenticationSucceeded(LoginFragment.java:251)
            at com.example.app.ui.controller.FingerprintCallback.onAuthenticationSucceeded(FingerprintCallback.java:21)
            at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.onAuthenticationSucceeded(FingerprintManagerCompat.java:301)
            at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1.onAuthenticationSucceeded(FingerprintManagerCompatApi23.java:96)
            at android.hardware.fingerprint.FingerprintManager$MyHandler.sendAuthenticatedSucceeded(FingerprintManager.java:805)
            at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:757)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    Caused by: android.security.KeyStoreException: Unknown error
            at android.security.KeyStore.getKeyStoreException(KeyStore.java:632)
            at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
            at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
            at javax.crypto.Cipher.doFinal(Cipher.java:1502) 
            at com.example.app.ui.fragment.util.LoginFragment.onAuthenticationSucceeded(LoginFragment.java:251) 
            at com.example.app.ui.controller.FingerprintCallback.onAuthenticationSucceeded(FingerprintCallback.java:21) 
            at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.onAuthenticationSucceeded(FingerprintManagerCompat.java:301) 
            at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1.onAuthenticationSucceeded(FingerprintManagerCompatApi23.java:96) 
            at android.hardware.fingerprint.FingerprintManager$MyHandler.sendAuthenticatedSucceeded(FingerprintManager.java:805) 
            at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:757) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at …
Run Code Online (Sandbox Code Playgroud)

encryption android keystore android-keystore android-fingerprint-api

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

片段未添加(不一致的崩溃)

在我MainActivity,我有:

@Override
protected void onResume() {
    super.onResume();

    checkForCrashes();
    checkForTutorial();
    checkForUpdates();
    setStore();
    setup();
}
Run Code Online (Sandbox Code Playgroud)

setup(),我打电话initializeTabs()回调:

protected void setup() {
    final Store s = getStore();
    setBackground();

    if (s == null) {
        unauthorizedHandler();
        return;
    }
    final Context mainActivity = this;
    fragments = getTabFragments();

    StoresController.getStoreDetails(s, mainActivity, new Callback<StoreDetailDecorator>() {
        @Override
        public void success(StoreDetailDecorator storeDetailDecorator, Response response) {
            s.prettyName = storeDetailDecorator.store.pretty_name;
            s.save();
            Log.v(TAG, s.prettyName);
            TextView toolbar_label = (TextView)findViewById(R.id.toolbar_label);
            toolbar_label.setText(MainActivity.getTruncatedMenuName(s.name()));

            SummaryTab t1 = (SummaryTab)fragments.get(0);
            t1.notifier = (SummaryTabLoadingNotifier)mainActivity;
            initializeTabs(s, fragments);
            t1.populateReport(); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmentpageradapter

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

有没有办法专门为三星设备设置和应用程序图标?

我注意到三星应用程序具有特定的形状; 例如,下面的图库,相机,手机,消息和互联网应用程序图标.

在此输入图像描述

有没有办法为三星设备指定图标?类似于新的Google Pixel如何android:roundIcon在清单中使用该属性?

我尝试在Samsung Developer文档中寻找一些东西,但似乎没有关于这个主题的任何内容.

这些设备确实有一种识别三星应用程序的方法,考虑到带有背景设置的图标 [ 设置 > 显示 > 图标背景 ]为所有其他应用程序启用类似形状的背景.例如,下面是Google Play商店图标.

在此输入图像描述

但我不确定这是否是一个公开可用的选项.


如果三星采用Android Oreo的新自适应图标,这个问题将无关紧要; 但据我所知,他们还没有.

android samsung-mobile android-attributes samsung-galaxy

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

在UITableViewCell里面的UITextView,当tableView滚动时如何重新签名textview的firstResponder?

我创建了一个自定义UITableViewCell,并且UITextView放在这个原型单元格中.当我单击此textView时,键盘可以自动弹跳.但是,如果我想隐藏键盘,我将不得不点击Return键.这不太方便.

这是问题所在.firstResponder当我滚动tableview时,如何重新设置textView 以隐藏键盘.

cellForRowAtIndex 方法如下.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = UITableViewCell()
    if(indexPath.section == 0){
        cell = self.tableView.dequeueReusableCellWithIdentifier("InputCell")!
        let textView = cell.viewWithTag(102) as! UITextView
        textView.editable = true
        textView.keyboardType = UIKeyboardType.Default
        textView.delegate = self
        textView.targetForAction(#selector(FeedBackViewController.getTextViewInsideCell(_:)), withSender: textView)
    }
    if(indexPath.section == 1){
        cell = self.tableView.dequeueReusableCellWithIdentifier("ConfirmButtonCell")!
        let label = cell.textLabel
        label?.text = "send"
        label?.textAlignment = NSTextAlignment.Center
        label?.textColor = UIColor.redColor()
    }
    return cell
}
Run Code Online (Sandbox Code Playgroud)

以下是我实施的一些方法.

func textView(textView: UITextView, shouldChangeTextInRange range: …
Run Code Online (Sandbox Code Playgroud)

uitableview uitextview first-responder ios swift

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