实现此目的的一种方法如下:
adb devices -l
Run Code Online (Sandbox Code Playgroud)
示例输出:
123abc12 device product:<id> model:<id> device:<id>
456abc45 device product:<id> model:<id> device:<id>
Run Code Online (Sandbox Code Playgroud)
但是这个列表已经连接了所有设备,但我想获取特定设备的信息.
我只想了解"123abc12"的信息.输出应该是:
123abc12 device product:<id> model:<id> device:<id>
Run Code Online (Sandbox Code Playgroud)
不应显示第二个设备.
我有设备名称,即123abc12,它可以用来获取所需的信息,但我不知道如何.
谢谢.
我有一个片段如下:
Process proc = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line = br.readLine();
Run Code Online (Sandbox Code Playgroud)
现在在上面的代码中我确信该进程将始终具有在线输入,因此我没有使用任何类型的while循环或任何空检查.问题是readLine块.我知道的一个原因是,流没有数据要读取,因此readLine一直在等待.为了检查这一点,我删除了readLine并使用了read()函数,如下所示:
Process proc = Runtime.getRuntime().exec( command );
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
int a;
while((a=br.read())!=-1){
char ch = (char) a;
if(ch == '\n')
System.out.print("New line "+ch);
if(ch == '\r')
System.out.print("Carriage return "+ch);
System.out.print(ch);
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这段代码工作并打印出麻烦的新行和回车.现在我想知道为什么readLine块?数据可用,它由换行符终止.还有什么可能的原因?
注意:以上工作偶尔一次!也许一次超过15次.
注意:我也尝试使用ProcessBuilder,但行为相同.
更新:所以我切换到ProcessBuilder,然后我重定向了errorStream,现在当我执行process.getInputStream时,我立刻得到输入流和错误流,这很好.以下是片段.
ProcessBuilder pb = new ProcessBuilder(command.split(" "));
pb..redirectErrorStream(true);
Process proc = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = br.readLine();
//Now I get both input …Run Code Online (Sandbox Code Playgroud) 我试图在java中为进程构建器设置PATH环境变量,我尝试了以下方法:
ProcessBuilder pb = new ProcessBuilder(command);
Map<String, String> mp = pb.environment();
mp.put("Path", "myPath");
pb.start();
Run Code Online (Sandbox Code Playgroud)
但是以下不起作用,进程构建器选择了默认的系统路径.我遇到了这个问题,这个技巧在我目前的项目中并没有帮助我.我该怎么办才能解决这个问题?
这个问题似乎很熟悉,是的,我一直在寻找解决方案,但是答案不适合我的用例。
我想访问所有活动的通知并在发布新通知之前使用该信息。我知道我们可以使用NotificationListenerService(https://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getActiveNotifications())
来获取AllActiveNotifications,但这将在通知发布回调为被接收者接收。我基本上想在发布新通知之前检查所有活动通知,以免再发布具有相同内容的通知。
为了发布,我使用NotificationManager,如下所示:
NotificationManager nm = mContext.getSystemService(mContext.NOTIFICATION_SERVICE);
nm.notify(tag, id, notification);
我不想将通知ID存储在数据库中,并在发布任何新通知时使用它。
我在这里先向您的帮助表示感谢!
更新:
似乎可以通过API23实现:
https : //developer.android.com/reference/android/app/NotificationManager.html#getActiveNotifications()
但是我想知道是否有任何方法可以在21或更低版本中实现。
我使用了两个命令等待设备启动:adb wait-for-device和adb wait-for-devices.两者似乎都在等待设备启动,我发现他们的行为没有任何差别.他们的行为有什么不同吗?
添加更多关于我所做的事情的信息:
所以这就是我所做的,从Android文档中我使用了adb wait-for-device但是有时候在使用这个命令的时候我用它作为adb wait-for-devices,你可以看到我最后添加了额外的's',但命令仍然有效.所以我在想为什么等待设备和等待设备都能正常工作!为什么android会为同一个提供两个命令?
我正在使用系统 api 启动一个命令(我可以将这个 api 与C/C++一起使用)。我传递的命令有时可能会挂起,因此我想在特定超时后终止。
目前我将它用作:
system("COMMAND");
Run Code Online (Sandbox Code Playgroud)
我想像这样使用它:
使用独立于系统的 API 运行命令(我不想使用 CreateProcess,因为它仅适用于 Windows)如果它在“X”分钟后没有退出,则终止该进程。
我正在显示来自我的应用程序的通知,并且此通知中有一个操作,当用户单击该操作时,将使用我设置的意图调用相应的操作类.现在,我想执行一个特定的操作,但在此之前,用户需要解锁屏幕,如果它是针脚/图案保护.我无法要求用户解锁设备,即在锁定屏幕上打开解锁键盘/图案.
以下是我的代码,
//HandleAction is a java class that extends IntentService
Intent intent = new Intent(context, HandleAction.class);
intent.putExtra(key, "my_value"); //Used to send information to action class
PendingIntent pi = PendingIntent.getService(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notification = new NotificationCompat.Builder(mContext);
//set the title, icon etc for builder and add action as below
notification.addAction(icon, "my_label", pi);
Run Code Online (Sandbox Code Playgroud)
当用户点击通知操作时,我将控件发送到MyAction.java中的onHandleIntent.
在这里,我想要求用户在密码保护时解锁设备,然后执行操作.如何在onHandleIntent中请求用户解锁设备?
我发现使用KeyguardManager和KeyguardLock来实现这一点,但是keyguardManager.newKeyguardLock是不推荐使用的方法,我想避免这种情况.所以,下一个是使用"FLAG_TURN_SCREEN_ON"和"FLAG_KEEP_SCREEN_ON",但我无法弄清楚如何在这种情况下使用它们.我没有从我的动作类中启动任何窗口,它只是一个增加我的计数器的操作.点击它后,通知应该消失,执行我的操作就可以了.
我发现了一个类似的问题解锁手机,但它的方式是通过启动虚拟/空活动.
在此先感谢任何帮助,建议:)
我只是想知道我是否访问系统变量(如 PATH 设置或其他环境变量)并使用 html 页面显示它!是否可以?或者有什么方法可以实现这一目标?
这个问题我想了很久!
我在eclipse插件中创建了一些页面的自定义向导。通过扩展WizardPage创建页面。该向导具有“下一步”“完成”和“取消”按钮,一切正常。
现在,我想将“完成”按钮的名称/文本更改为“完成”。是否有可能在日食中做到这一点?还是我需要自己提供所有按钮,即使这样也可以。
考虑一下字符串,
this\is\\a\new\\string
Run Code Online (Sandbox Code Playgroud)
输出应该是:
this\is\a\new\string
Run Code Online (Sandbox Code Playgroud)
所以基本上一个或多个\角色应该只用一个替换\.我尝试了以下方法:
str = str.replace("[\\]+","\")
Run Code Online (Sandbox Code Playgroud)
但这没用.我用了两个原因\在[\\]+是因为内部\存储为\\.我知道这可能是一个基本的正则表达式问题,但我能够替换一个或多个普通字母而不是\字符.任何帮助都非常感谢.