标签: android-7.0-nougat

NestedScrollView阻止Nougat上的bug(API 25)

我在Nexus 5x(7.1.2)和Google Pixel(7.1.1)上使用NestedScrollView时遇到了一个奇怪的问题.在其他操作系统版本上它运行正常.

举起动画有时会在举起手指后立即停止.它会停滞不前,接下来的几次飞行也可能会停止.为了重现它,你需要上下几次投掷.

在日志中,这些flings在速度,方向等方面看起来几乎相同,所以我找不到这个bug的真正原因.

NestedScrollView并不一定需要的内部CoordinatorLayout,也可以没有NestedScrollingChild在所有.

例如,此错误可以使用以下NestedScrollView子项之一重现:

1)LinearLayout填充TextViews

2) WebView

3)LinearLayout填充RecyclerViews.

我知道RecyclerView内部和行为的可能问题CoordinatorLayout,但它没有关系.所以请不要提及任何

recyclerView.getLayoutManager().setAutoMeasureEnabled(true);
recyclerView.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

代码示例:

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:text="Put a super long text here"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:text="Put a super long text here"/>

    </LinearLayout>

</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)

android scroll android-support-library nestedscrollview android-7.0-nougat

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

Android N - 虽然minSDK设置为14,但无法在较低的API上运行

我正在尝试API 22在将compileSdkVersion更新为N但无法执行此操作后在设备上运行APK .

compileSdkVersion 'android-N'
buildToolsVersion "24.0.0 rc1"

defaultConfig {
       minSdkVersion 14
       targetSdkVersion 'N'
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

android android-7.0-nougat

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

Android N没有发送android.net.conn.CONNECTIVITY_CHANGE广播?

我在沙箱Android N应用程序中定义了一个接收器:

<receiver
    android:exported="true"
    android:name="com.sandboxapplication.NetworkReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

这很简单:

public class NetworkReceiver extends BroadcastReceiver {
    private static final String TAG = NetworkReceiver.class.getName();
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Received Network Change event.");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在我的build.gradle文件中我的targetSdkVersion是23,那么这个接收器工作正常.但是,如果我将targetSdkVersion设置为24,接收器永远不会收到任何东西.事实上,如果我在我的接收器中放置一个调试断点,Android Studio会给我一个视觉指示,看起来它甚至从未加载到内存中.

我是否错过了Android N文档中非常基本的内容?有没有新的方法来检测连接变化事件?

android android-7.0-nougat

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

如何利用NotificationListener使用Android Nougat的直接回复功能?

我的应用程序使用a NotificationListener来读取来自各种第三方应用程序的消息,例如WhatsApp.

到目前为止,如果只有一个聊天未读,我能够发送回复,代码如下.

但是,在WhatsApp的情况下,getNotification().actions当未读取两个以上的聊天时返回一个空对象,因为消息被捆绑在一起.正如您在下面的图片中看到的,如果通知被扩展,还有一个选项可以发送直接回复,因此我确信可以利用它,我认为像PushBullet这样的应用程序正在使用此方法.

我怎样才能访问该通知的RemoteInput?

public static ReplyIntentSender sendReply(StatusBarNotification statusBarNotification, String name) {

            Notification.Action actions[] = statusBarNotification.getNotification().actions;

            for (Notification.Action act : actions) {
                if (act != null && act.getRemoteInputs() != null) {
                    if (act.title.toString().contains(name)) {
                        if (act.getRemoteInputs() != null)
                            return new ReplyIntentSender(act);
                    }
                }
            }
            return null;
        }



public static class ReplyIntentSender {
      [...]

    public final Notification.Action action;

    public ReplyIntentSender(Notification.Action extractedAction) {
            action = extractedAction;
     [...]
    }

private boolean sendNativeIntent(Context context, String message) {
            for (android.app.RemoteInput rem …
Run Code Online (Sandbox Code Playgroud)

android notification-listener android-7.0-nougat remote-input

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

Android Internet连接检查更好的方法

根据Android开发者网站" 确定和监控连接状态",我们可以检查是否存在活动的Internet连接.但即使只连接了Wi-Fi而没有互联网可用(它通知有互联网连接),这也无效.

现在我ping一个网站,检查互联网连接是否可用.而且这种方法需要更多的处理时间.是否有更好的方法来检查Internet连接,以避免ping地址的时间延迟?

android internet-connection android-7.0-nougat

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

使用Android中的JobSchedulers检测网络状态更改

使用Android N,您无法静态注册CONNECTIVITY_CHANGE意图的广播接收器.

来自http://developer.android.com/preview/features/background-optimization.html#connectivity-action Google文档建议使用Job Scheduler执行此任务.

是否可以使用Android中的Job Scheduler检测网络状态变化(LTE到wifi),反之亦然?

networking android android-7.0-nougat

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

带有Nougat的java.lang.NullPointerException

我的应用程序一直在通过各种Android版本很好地哼唱.我有用户在Android 4.3,5.0,5.1和6.0上运行它没有任何问题.但是,使用S7 Edge的用户刚刚使用Android 7.0进行了更新,当文本粘贴到EditText字段时,应用程序崩溃(这是您使用此应用程序的第一个也是唯一的事情 - 它开始将文本粘贴到一个框中,然后应用程序解析文本).

我已经查看了Null Pointer Exceptions上的许多线程,我查看了Editor.java的源代码,但没有什么是显而易见的.下面的堆栈跟踪显示我的代码没有问题.他们用7.0改变了什么可能导致这个?

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.Editor$SelectionModifierCursorController.isDragAcceleratorActive()' on a null object reference
at android.widget.Editor.updateFloatingToolbarVisibility(Editor.java:1520)
at android.widget.Editor.onTouchEvent(Editor.java:1475)
at android.widget.TextView.onTouchEvent(TextView.java:10024)
at android.view.View.dispatchTouchEvent(View.java:10725)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.widget.ScrollView.dispatchTouchEvent(ScrollView.java:738)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:505)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1863)
at android.app.Activity.dispatchTouchEvent(Activity.java:3226)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:467)
at android.view.View.dispatchPointerEvent(View.java:10954)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5051)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4908)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4439)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4492)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4458)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4591)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4466)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4648)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4439) …
Run Code Online (Sandbox Code Playgroud)

nullpointerexception samsung-mobile android-7.0-nougat

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

Android Alarm Manager setExactAndAllowWhileIdle()在Doze模式下无法在Android 7.0 Nougat中运行

我试图使用Alarm Manager每隔30分钟在我的应用程序中发出警报,setExactAndAllowWhileIdle但它无法正常工作!

每当收到报警信号时,我都会通过发出推送通知来测试功能.

问题是:当设备闲置一段时间后进入打盹模式时,我不再收到警报.但是,只要我打开屏幕,我就会收到通知.我的应用程序需要准确的警报,需要每30分钟准确按时交付!由于设备处于打盹模式,它无法接收延迟警报或丢失警报!

我在我的代码中使用了以下内容:

  1. 我在打开应用程序时设置闹钟.
  2. 我使用WakefulBroadcastReceiver接收警报信号.在它的 onReceive()方法中,我设置下一个警报.我也是,启动一个只发出推送通知的startWakefulService,然后自行停止.
  3. 我在onReceive()的末尾调用completeWakefulIntent.
  4. 我尝试了两种方法:RTC_WAKEUP和ELAPSED_REALTIME_WAKEUP

笔记:

  • wakefulbroadcastReceiver类在Manifest中注册.
  • 我添加了权限: android.permission.WAKE_LOCK
  • 我试过White-Listing我的应用程序,但结果是一样的
  • 我尝试使用setAlarmClock()它甚至在打盹模式下一直工作,每50个警报一个丢弃/延迟警报.所以,它也不完美.而且我不希望用户一直看到警报图标.
  • 在打盹期间,setExactAndAllowWhileIdle()不仅不起作用,而且在它工作时也具有可怕的准确性.我通常会
    在1-3分钟后或1-3分钟前收到很多警报信号.
  • 我正在使用华为Mate 8和android 7.0 Nougat进行测试.

PS: 在回答之前,请确保您了解从Android 6.0 M和Doze模式开始施加的限制.

Link1:https://developer.android.com/training/monitoring-device-state/doze-standby.html

总之它说:

  • 如果需要设置在Doze中触发的警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle().
  • 使用setAlarmClock()设置的警报继续正常启动 - 系统在警报触发前不久退出Doze.

现在,为什么我不能每30分钟使用setExactAndAllowWhileIdle()?获得准确的报警信号?而且,为什么不是setAlarmClock()100%可靠?!

android android-intent android-alarms android-doze android-7.0-nougat

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

Java 8是否适用于Android api 24及更高版本或者您可以在较低的api中使用?

在基于此页面的android中,Java 8语言功能仅在api 24及以上版本中运行,或者你可以在api低于api 24使用,如果你能使用这个功能,那么android中最小的api版本支持这些功能

lambda android android-7.0-nougat

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

适用于CACHE DIR的Android FileProvider:无法找到包含的已配置根目录

我找到了很多与FileProvider相关的链接,但我找不到缓存目录的解决方案

java.lang.IllegalArgumentException:无法找到包含的已配置根目录 /data/data/pkg name/cache/1487876607264.png

我想将它用于CACHE DIRECTORY,我如何在提供者中提供路径.

<paths>
    <external-path name="external_files" path="."  />
</paths>
Run Code Online (Sandbox Code Playgroud)

我用它作为:

File file = new File(context.getCacheDir(), System.currentTimeMillis() + ".png");

Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
Run Code Online (Sandbox Code Playgroud)

如果我提供应用程序文件夹路径,但它不能使用缓存目录,它的工作正常.

任何帮助?

android caching android-fileprovider android-7.0-nougat android-7.1-nougat

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