我正在尝试编写一个与rild交谈的应用程序.是的,我知道这在政治上是不正确的,但它是一个嵌入式工业遥测应用程序,所以我不关心用户体验,可移植性和所有这些东西.
问题是,当我尝试连接时,我得到一个java.io"Permission denied"异常.有谁能够帮我?
手机(Nexus One)植根于Cyanogenmod 7,该应用程序使用Market的"SuperUser"应用程序以超级用户身份运行.
我的代码(缩写):
try {
mSocket = new LocalSocket();
mSockAddr = new LocalSocketAddress( "rild", LocalSocketAddress.Namespace.RESERVED );
mSocket.connect( mSockAddr );
}
catch( Exception e ) {
dbg.p( "connect failed: "+e );
}
Run Code Online (Sandbox Code Playgroud)
我在/ dev/socket中看到了rild(和rild-debug)套接字.
srw-rw---- 1 root radio 0 Feb 13 19:14 rild
srw-rw---- 1 radio system 0 Feb 13 19:14 rild-debug
Run Code Online (Sandbox Code Playgroud)
可能是拨号器应用程序已经连接并占用套接字?
BTW我最初尝试使用这些框架但是得到了一大堆关于java和第三方类未知的错误,所以我放弃了几天后就放弃了.我也是STFW和这个网站 - 围绕这个问题跳舞,但没有具体的建议.
任何帮助非常感谢.-约翰
我正在尝试开发一个Android(服务器)应用程序,该应用程序将直接 从Internet 接受TCP连接。几年前,我没有任何尝试。这有可能吗?
那时,我在StackOverflow和其他地方以不同的方式提出了这个问题,但从未得到满意的答案。答案分为两类:
不,您不能
给出最权威的答案:大多数运营商不会将连接请求路由到移动设备。
是的,您可以。
这些答案没有提供帮助的详细信息或示例。
我尝试过的
我可以通过各种方式成功获取移动设备的外部IP。但这只是难题的一部分。请参阅下面的注释1。
我创建了一个侦听端口(例如2000)的ServerSocket。但是该应用程序不接受此套接字上来自Internet的连接。显然,此套接字正在设备的本地(内部)网络(即192.168.1.0)上侦听。
我能够通过设备上的其他应用程序(位于同一子网中)进行连接。
我还可以通过商店中的NAT路由器进行连接,该路由器将Internet地址转换为设备的本地网络。但这对现场(没有可用的路由器)没有帮助。请参阅下面的注释2。
我曾尝试向AT&T客户支持型人员咨询,但我认为他们不理解我的问题。
笔记:
我当前的理论(9/23/19)
我目前的谦虚信念是,这里有一个类似NAT的实体在起作用。要么:
无论哪种情况,根据这种理论,入站 TCP连接都不会转发到设备的本地网络,但是出站连接可以正常通过。
摘要
也许答案仍然是一样的,但是我想我会再问一遍,以防万一情况发生了变化或如今人们有了更好的见解,
我试图理解C enum的完整语法.几十年来,我成功地使用了如下的简单枚举:
enum {
IDLE,
BUSY,
FAILED
};
Run Code Online (Sandbox Code Playgroud)
但是我看到C enum的正式定义还允许标签和实例名称如下所示:
enum STATE {
IDLE,
BUSY,
FAILED
} appstate;
Run Code Online (Sandbox Code Playgroud)
何时以及为什么我会使用"STATE"或"appstate"?对于我的生活,我想不出一个理由.
问题8414188和7386805在这个问题上击败了丛林,但没有启发.
更新5/4/19
我对我的问题提出了一些澄清,以回应下面的答案:
1.我确实使用了前缀,例如STATE_IDLE,但是这些在我上面的例子中被修剪了.2.我已经研究使用枚举几个代码示例.这些证实了我对增强语法的理解,但没有解释原因.
我经常将我的匿名枚举放在项目范围的.h文件中,这似乎工作正常.我仍然无法弄清楚为什么我想浪费击键来使用政治上正确的增强语法.是否仅仅(据称)提高了可读性?或者我错过了什么?
我正在尝试了解 gradle 构建的工作原理。当我进行构建时,我看到执行了一堆任务,例如:
app:assembleDebug
app:preBuild
app:packageDebug
Run Code Online (Sandbox Code Playgroud)
我想看看这些任务到底在做什么。我假设这些是 Gradle / Groovy 脚本。我尝试解压缩 Android Studio 下的所有 jars。那里有很多东西,但我没有看到任何相关的东西(我可能在大量列表中遗漏了一些东西)。这些任务是否隐藏在类文件中?我找错地方了吗?
我正在尝试(未成功)为我的应用程序构建 AAB,显然现在需要在 PlayStore 中发布。使用 AndroidStudio V3.5.3,如果我选择“Build->GenerateSignedBundle/APK”并提供所需的签名信息,则不会发生任何事情:不进行处理,不产生任何输出。
“Build->BuildBundle(s)/APK(s)”有效,但输出未签名。
“运行->运行应用程序”和“运行->调试应用程序”工作,但与上面相同。
我错过了什么?
我已经阅读了我能找到的所有文档,但没有任何帮助。
我正在尝试在我的android项目中使用自定义aar。我在StackOverflow和Web中找到了许多示例。许多构建失败,没有一个起作用。最清晰的网址是
http://kevinpelgrims.com/blog/2014/05/18/reference-a-local-aar-in-your-android-project/
最接近工作的地方。
这就是我所做的
从Ref.java成功创建了一个非常简单的AAR(Ref.aar)
// Ref.java
package com.ramrod.Ref;
public class Ref {
// Square an integer
public static int
square(int val) {
return (val * val);
}
}
Run Code Online (Sandbox Code Playgroud)创建一个测试项目(RefTest)
修改后的build.gradle
// build.gradle (Module: app)
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.ramrod.RefTest"
minSdkVersion 11
targetSdkVersion 15
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
} …
Run Code Online (Sandbox Code Playgroud)蓝牙服务发现协议 (SDP) 守护进程在哪里?
我正在尝试使用 bluez 在 Debian V8.0 上注册蓝牙服务。我在https://people.csail.mit.edu/albert/bluez-intro/使用示例代码。一切顺利,直到我尝试
sdp_connect( BDADDR_ANY, BDADDR_LOCAL, 0 );
Run Code Online (Sandbox Code Playgroud)
这失败了。经过一番挖掘,我发现 sdp 守护进程 (sdpd)(它需要连接到它)没有运行,实际上我的系统上甚至不存在。
我试过的:
我的目标:
我正在尝试在我的 Debian 系统上注册我的服务,以便我可以从另一个蓝牙设备(特别是我的 Android)连接到它。该服务运行良好,只是没有 SDP 注册就无法找到它。
我很乐意使用它的(已知)频道号直接连接到它,但 Android 只能通过注册服务 UUID(即使用BluetoothDevice.createRfcommSocketToServiceRecord(uuid)
)进行连接,但我看不到连接到频道的API 。
有趣的是,我可以通过channel number连接到 Android 上的服务,但反过来不行。我认为 sdpd 可能已经过时了——所有对它的引用都已经有好几年了。
Android API 23 及更高版本要求在运行时确认“危险”权限。根据其他 StackOverflow 建议,我使用 checkSelfPermissions() 检查所需的权限,如果需要,调用 requestPermissions()。这工作正常,但请求是异步处理的,即 requestPermissions() 立即返回。问题是我的应用程序在 requestPermissions() 之后继续运行。稍后,权限确认对话框出现,但到那时,我的应用程序尝试了失败的 API 调用。
我假设我需要等到所有权限都被授予才能继续我的应用程序。我想我可以实现一些民意调查来做到这一点,但这对我来说太粗糙了。解决这个问题的“最佳实践”是什么?文档中的各种最佳实践描述都没有解决这个问题。
当我第一次开始Android Studio
打开现有项目,然后单击时Run
,我收到错误消息Error running app, No target device found
.我Samsung
插电了ADB debugging enabled
.它正确显示adb devices
命令和ADB
shell工作正常.我试着adb start-server
没有快乐.奇怪的是,如果我先启动'Debug app'然后'Run'它运行正常,但我不明白为什么这个烦人的步骤是必要的.其他StackOverflow
答案说做"编辑配置",但没有显示建议的选项.我跑AS V3.01
.任何线索?
apksigner
这在 SO 问题 7104624、 developer.android.com 上的文档和其他地方进行了讨论。他们都说在验证命令行上使用选项“--print-certs” apksigner
。但我总是收到错误消息unsupported option: --print-certs
。
我已经尝试apksigner.bat
过各个版本26.0.2
,27.0.2
并且26.0.3
结果都相同。
我可能在做一些愚蠢的事情,但我不知道那是什么。有人有类似的经历吗?
如何对 Bash 变量进行按位 AND 运算?我想测试程序退出代码中的各个位。就像是:
myprog
BITS=$?
if [ $BITS & 4 ]; then
echo "Bit 2 set"
fi
Run Code Online (Sandbox Code Playgroud)
建议?
我开始在 Debian 8 下使用 gcc 进行多线程编程。我已经成功编写并运行了一个多线程测试应用程序 (foobar.c),但我对 Makefile 感到困惑(从示例中复制)。特别是,有效的命令是
gcc foobar.c -o foobar -pthread
Run Code Online (Sandbox Code Playgroud)
我对“-pthread”感到困惑。就是它
(a) 值为“thread”的选项“-p”,或
(b) 参数“-pthread”?
如果是任何一种情况,它实际上在做什么?包括一些图书馆?包括一些对象?设置其他选项?
我读过无数遍,在 Java 中,传递给方法的参数不能被方法修改。尽管如此,我发现我可以修改我创建的对象而不是 Java 对象。考虑以下代码:
// My Integer Object
class MyInteger {
Integer val;
}
// Change Java Object
public void test1() {
Integer intval; // Integer object
intval = 123;
setInteger( intval ); // THIS DOESN'T WORK
TTY.putR( "Integer Object="+intval);
}
// Change My Object
public void test2() {
MyInteger myInt; // MyInteger object
myInt = new MyInteger();
myInt.val = 456;
setMyInteger( myInt ); // THIS WORKS!
TTY.putR( "MyIntegerObject=" + myInt.val );
}
// Set an Integer …
Run Code Online (Sandbox Code Playgroud)