我可以在 Android Studio 中进行无线调试。它只是不能始终如一地工作。连接起来通常很麻烦,但我通常可以使用多种方法来解决它,其中一些方法是:
当它取消配对时,AS 中的配对很少起作用。它只是等待很长时间然后说失败,没有解释。但是,在命令提示符下配对几乎总是有效,因此我可以将其配对。
当我确实连接时,它经常掉线。有时甚至在运行我的应用程序并生成 logcat 输出时也是如此。
有时无线调试会在手机上关闭。有时没有,但通知消失了。或不。
我的无线网络工作正常并且非常可靠。我不认为这是无线网络。然而,它是双频路由器。我工作的地方通常使用 2.5 GHz 频段。我在互联网上没有找到任何提到双频的内容。
这款手机是 S22 Ultra,大部分时间都运行良好。我也不认为这是电话。
双频现在很常见。其他人在使用双频时是否遇到问题?它应该与双频一起工作吗?还有其他建议吗。
我刚刚开始确保我的应用程序可以在 Android 12 上运行。我注意到(我相信)所有应用程序在按下后退按钮时都会调用 onPause(),但不会调用 onDestroy()。这意味着该应用程序仍在运行。
以前,当按下后退按钮时,onDestroy() 会在 onPause() 之后调用。
对于运行有(实际上必须有)通知的后台服务的人来说,这绝对是一个问题。停止服务通常是在 onDestroy() 中完成的,当然不是在 onPause() 中完成的。由于未调用 onDestroy(),因此服务继续运行并且通知保持有效。如果您选择通知,它会再次显示[正在运行]应用程序。除非通过概述(左)按钮终止进程,否则无法停止服务并因此停止通知。
我还注意到,如果带有服务的应用程序崩溃,则通知会保持不变。这肯定不是我们所期望的行为。
您可以而且显然必须使用概览(左)软按钮终止该进程。
我可以通过实现 onBackPressed 来解决这个问题:
Run Code Online (Sandbox Code Playgroud)@Override public void onBackPressed() { // This seems to be necessary with Android 12 // Otherwise onDestroy is not called Log.d(TAG, this.getClass().getSimpleName() + ": onBackPressed"); finish(); super.onBackPressed(); }
但这似乎是一个拼凑。
对于其他应用程序来说,它们是否仍在运行可能并不重要。然而,这是意想不到的行为。
稍后添加:这显然是故意的,并且是对之前行为的改变。这篇文章中提到了这一点(感谢@ianhanniballake):
https://developer.android.com/about/versions/12/behavior-changes-all#back-press
我有几个应用程序,并且我已经验证了 Android 12 上的所有应用程序都发生了这种情况。它给那些拥有服务的应用程序带来了问题。
这个问题隐含的问题是如何处理它。我个人正在为这些实现 onBackPressed 并保留其他的。
我正在尝试编写一个可以访问Zephyr HxM Smart心脏监护仪的蓝牙LE应用程序.此显示器有几种蓝牙服务,但我对电池服务,心率服务以及具有活动和峰值加速的自定义服务感兴趣.电池电平,(BAT),心率测量(HR)和自定义测量(CUS)各有一个特征.HxM每秒更新一次.
我正在使用Android 4.4的Galaxy S4进行此操作.
它没有按照文档的预期工作.
我最初的做法是:
Read BAT
Set notification for HR
Set notification for CUS.
Run Code Online (Sandbox Code Playgroud)
然后等待回调.设置通知意味着呼叫
BluetoothGatt.setCharacteristicNotification(Characteristic char , boolean enabled)
Run Code Online (Sandbox Code Playgroud)
(也可以对BAT进行通知,但是,规范并不要求支持它.但是,HxM确实支持它.)
这没用.我得到了人力资源的BAT和通知,但不是CUS.如果我取消了第二步,我收到了CUS的通知.我无法得到两者.(这表明我正在正确地阅读这些特征,因此[可能]不是问题.)
我发现一些迹象表明Android的蓝牙堆栈存在同步问题,但没有硬文档.然后我尝试了以下内容:
Read BAT.
Wait for the BAT reading, then set notification for HR,
Get HR, then disable notification for HR, and start notification for CUS.
Get CUS, then disable notification for CUS, and start notification for HR.
And continue to loop.
Run Code Online (Sandbox Code Playgroud)
我得到了BAT,就是这样.
通过反复试验,我发现了以下工作:
Read BAT.
Wait for the BAT reading, then set …Run Code Online (Sandbox Code Playgroud) notifications android bluetooth bluetooth-lowenergy android-bluetooth
我试图在C#应用程序中实现GetWindowDpiAwarenessContext,但没有成功。
relevent头文件是:
windef.h
DECLARE_HANDLE(DPI_AWARENESS_CONTEXT);
typedef enum DPI_AWARENESS {
DPI_AWARENESS_INVALID = -1,
DPI_AWARENESS_UNAWARE = 0,
DPI_AWARENESS_SYSTEM_AWARE = 1,
DPI_AWARENESS_PER_MONITOR_AWARE = 2
} DPI_AWARENESS;
#define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1)
#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4)
Run Code Online (Sandbox Code Playgroud)
WinUser.h
WINUSERAPI
DPI_AWARENESS_CONTEXT
WINAPI
GetWindowDpiAwarenessContext(
_In_ HWND hwnd);
Run Code Online (Sandbox Code Playgroud)
我在用:
/// <summary>
/// Class for native methods.
/// </summary>
internal static class NativeMethods {
[DllImport("user32.dll")]
internal static extern IntPtr GetWindowDpiAwarenessContext(IntPtr hWnd);
...
// Dpi awareness context
IntPtr dpiAwarenessContext = NativeMethods.GetWindowDpiAwarenessContext(process.Handle);
if (dpiAwarenessContext == (IntPtr)(-1)) {
sb.AppendLine(" DPI …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 C# 9 并且正在尝试实现顶级语句,特别是在无处不在的 Program.cs 中。我在一种情况下成功地做到了这一点,但在第二种情况下,应用程序在 OpenFileDialog() 中获得了 ThreadStateException。
我替换了生成的 Program.cs
using System;
using System.Windows.Forms;
namespace MapLines {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
using System.Windows.Forms;
using MapLines;
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
Run Code Online (Sandbox Code Playgroud)
这是 OpenFileDialog 中的例外
System.Threading.ThreadStateException
HResult=0x80131520
Message=Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure …Run Code Online (Sandbox Code Playgroud)