我在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
我正在尝试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 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文档中非常基本的内容?有没有新的方法来检测连接变化事件?
我的应用程序使用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
根据Android开发者网站" 确定和监控连接状态",我们可以检查是否存在活动的Internet连接.但即使只连接了Wi-Fi而没有互联网可用(它通知有互联网连接),这也无效.
现在我ping一个网站,检查互联网连接是否可用.而且这种方法需要更多的处理时间.是否有更好的方法来检查Internet连接,以避免ping地址的时间延迟?
使用Android N,您无法静态注册CONNECTIVITY_CHANGE意图的广播接收器.
来自http://developer.android.com/preview/features/background-optimization.html#connectivity-action Google文档建议使用Job Scheduler执行此任务.
是否可以使用Android中的Job Scheduler检测网络状态变化(LTE到wifi),反之亦然?
我的应用程序一直在通过各种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) 我试图使用Alarm Manager每隔30分钟在我的应用程序中发出警报,setExactAndAllowWhileIdle但它无法正常工作!
每当收到报警信号时,我都会通过发出推送通知来测试功能.
问题是:当设备闲置一段时间后进入打盹模式时,我不再收到警报.但是,只要我打开屏幕,我就会收到通知.我的应用程序需要准确的警报,需要每30分钟准确按时交付!由于设备处于打盹模式,它无法接收延迟警报或丢失警报!
我在我的代码中使用了以下内容:
onReceive()方法中,我设置下一个警报.我也是,启动一个只发出推送通知的startWakefulService,然后自行停止.笔记:
android.permission.WAKE_LOCKsetAlarmClock()它甚至在打盹模式下一直工作,每50个警报一个丢弃/延迟警报.所以,它也不完美.而且我不希望用户一直看到警报图标.PS: 在回答之前,请确保您了解从Android 6.0 M和Doze模式开始施加的限制.
Link1:https://developer.android.com/training/monitoring-device-state/doze-standby.html
总之它说:
现在,为什么我不能每30分钟使用setExactAndAllowWhileIdle()?获得准确的报警信号?而且,为什么不是setAlarmClock()100%可靠?!
android android-intent android-alarms android-doze android-7.0-nougat
在基于此页面的android中,Java 8语言功能仅在api 24及以上版本中运行,或者你可以在api低于api 24使用,如果你能使用这个功能,那么android中最小的api版本支持这些功能
我找到了很多与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