小编Don*_*nic的帖子

如何连接到rild Socket

我正在尝试编写一个与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 ril

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

从互联网连接到Android应用程序的套接字:可以吗?

我正在尝试开发一个Android(服务器)应用程序,该应用程序将直接 从Internet 接受TCP连接。几年前,我没有任何尝试。这有可能吗?

那时,我在StackOverflow和其他地方以不同的方式提出了这个问题,但从未得到满意的答案。答案分为两类:

  • 不,您不能
    给出最权威的答案:大多数运营商不会将连接请求路由到移动设备。

  • 是的,您可以。
    这些答案没有提供帮助的详细信息或示例。

我尝试过的

  • 我可以通过各种方式成功获取移动设备的外部IP。但这只是难题的一部分。请参阅下面的注释1。

  • 我创建了一个侦听端口(例如2000)的ServerSocket。但是该应用程序不接受此套接字上来自Internet的连接。显然,此套接字正在设备的本地(内部)网络(即192.168.1.0)上侦听。

  • 我能够通过设备上的其他应用程序(位于同一子网中)进行连接。

  • 我还可以通过商店中的NAT路由器进行连接,该路由器将Internet地址转换为设备的本地网络。但这对现场(没有可用的路由器)没有帮助。请参阅下面的注释2。

  • 我曾尝试向AT&T客户支持型人员咨询,但我认为他们不理解我的问题。

笔记:

    1. 是的,设备的IP地址会随时间或位置而变化,但是我始终可以通过各种方式(例如whatmyip.com等)获得正确的当前 IP。但是,使用当前设备IP也不起作用。顺便说一句-我的公共IP 从未改变。因此,出于所有意图和目的,我的IP 静态的。在任何情况下,IP问题都是一马当先,我可以肯定这是路由问题,而不是IP地址问题。
    1. 我可以通过WiFi连接,因为我的Internet调制解调器/路由器在设备的本地子网(192.168.1。)上通过Wifi在背面提供了DHCP连接。我的设备的地址为192.168.1.65,因此我无需通过运营商即可连接到它。
    1. AT&T告诉我,我无法为移动设备购买静态IP(更新9/23/19)。

我当前的理论(9/23/19)

我目前的谦虚信念是,这里有一个类似NAT的实体在起作用。要么:

  • 公用IP实际上指向AT&T总部的NAT路由器。
  • 该设备具有内置的类似NAT的路由器

无论哪种情况,根据这种理论,入站 TCP连接都不会转发到设备的本地网络,但是出站连接可以正常通过。

摘要

也许答案仍然是一样的,但是我想我会再问一遍,以防万一情况发生了变化或如今人们有了更好的见解,

android serversocket server

10
推荐指数
1
解决办法
237
查看次数

C enum标签:何时/为何使用

我试图理解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"?对于我的生活,我想不出一个理由.

问题84141887386805在这个问题上击败了丛林,但没有启发.

更新5/4/19
我对我的问题提出了一些澄清,以回应下面的答案:
1.我确实使用了前缀,例如STATE_IDLE,但是这些在我上面的例子中被修剪了.2.我已经研究使用枚举几个代码示例.这些证实了我对增强语法的理解,但没有解释原因.
我经常将我的匿名枚举放在项目范围的.h文件中,这似乎工作正常.我仍然无法弄清楚为什么我想浪费击键来使用政治上正确的增强语法.是否仅仅(据称)提高了可读性?或者我错过了什么?

c enums

6
推荐指数
1
解决办法
1525
查看次数

Android Studio:Gradle 构建任务在哪里定义?

我正在尝试了解 gradle 构建的工作原理。当我进行构建时,我看到执行了一堆任务,例如:

app:assembleDebug
app:preBuild
app:packageDebug
Run Code Online (Sandbox Code Playgroud)

我想看看这些任务到底在做什么。我假设这些是 Gradle / Groovy 脚本。我尝试解压缩 Android Studio 下的所有 jars。那里有很多东西,但我没有看到任何相关的东西(我可能在大量列表中遗漏了一些东西)。这些任务是否隐藏在类文件中?我找错地方了吗?

gradle android-studio build.gradle android-gradle-plugin

6
推荐指数
1
解决办法
862
查看次数

如何构建签名包 (AAB)?

我正在尝试(未成功)为我的应用程序构建 AAB,显然现在需要在 PlayStore 中发布。使用 AndroidStudio V3.5.3,如果我选择“Build->GenerateSignedBundle/APK”并提供所需的签名信息,则不会发生任何事情:不进行处理,不产生任何输出。

“Build->BuildBundle(s)/APK(s)”有效,但输出未签名。
“运行->运行应用程序”和“运行->调试应用程序”工作,但与上面相同。

我错过了什么?

我已经阅读了我能找到的所有文档,但没有任何帮助。

android bundle signing build

6
推荐指数
2
解决办法
3358
查看次数

如何在AndroidStudio项目中添加和使用AAR

我正在尝试在我的android项目中使用自定义aar。我在StackOverflow和Web中找到了许多示例。许多构建失败,没有一个起作用。最清晰的网址http://kevinpelgrims.com/blog/2014/05/18/reference-a-local-aar-in-your-android-project/
最接近工作的地方。

这就是我所做的

  1. 从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)
  2. 创建一个测试项目(RefTest)

  3. 在RefTest / app下创建了文件夹“ libs”
  4. 将Ref.aar添加到库中
  5. File-> New-> New Module-> Import .JAR / .AAR包。
  6. 选择Ref.jar作为filename-> Finish(成功显示)。
  7. 修改后的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)

java android build.gradle android-gradle-plugin aar

4
推荐指数
2
解决办法
6199
查看次数

蓝牙 SDP - sdpd 在哪里?

蓝牙服务发现协议 (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)(它需要连接到它)没有运行,实际上我的系统上甚至不存在。

我试过的:

  1. 我已经安装了 (apt-get) 每个似乎远程相关但仍然没有 sdpd 的蓝牙或 bluez 包。
  2. 我尝试使用我的 Android 手机的地址进行连接(使用相同的代码)。这工作得很好,但当然没有用。
  3. 对该问题进行了详尽的谷歌搜索,但没有找到明确的答案。有很多关于 hcid、pand 等的讨论,但没有明确回答这些是如何相关的。

我的目标:

我正在尝试在我的 Debian 系统上注册我的服务,以便我可以从另一个蓝牙设备(特别是我的 Android)连接到它。该服务运行良好,只是没有 SDP 注册就无法找到它。

我很乐意使用它的(已知)频道号直接连接到它,但 Android 只能通过注册服务 UUID(即使用BluetoothDevice.createRfcommSocketToServiceRecord(uuid))进行连接,但我看不到连接到频道的API 。

有趣的是,我可以通过channel number连接到 Android 上的服务,但反过来不行。我认为 sdpd 可能已经过时了——所有对它的引用都已经有好几年了。

debian android bluetooth sdp

3
推荐指数
1
解决办法
2227
查看次数

requestPermission:如何等待直到被授予?

Android API 23 及更高版本要求在运行时确认“危险”权限。根据其他 StackOverflow 建议,我使用 checkSelfPermissions() 检查所需的权限,如果需要,调用 requestPermissions()。这工作正常,但请求是异步处理的,即 requestPermissions() 立即返回。问题是我的应用程序在 requestPermissions() 之后继续运行。稍后,权限确认对话框出现,但到那时,我的应用程序尝试了失败的 API 调用。

我假设我需要等到所有权限都被授予才能继续我的应用程序。我想我可以实现一些民意调查来做到这一点,但这对我来说太粗糙了。解决这个问题的“最佳实践”是什么?文档中的各种最佳实践描述都没有解决这个问题。

android android-permissions

3
推荐指数
1
解决办法
4111
查看次数

Android Studio:找不到目标设备:为什么?

当我第一次开始Android Studio打开现有项目,然后单击时Run,我收到错误消息Error running app, No target device found.我Samsung插电了ADB debugging enabled.它正确显示adb devices命令和ADBshell工作正常.我试着adb start-server没有快乐.奇怪的是,如果我先启动'Debug app'然后'Run'它运行正常,但我不明白为什么这个烦人的步骤是必要的.其他StackOverflow答案说做"编辑配置",但没有显示建议的选项.我跑AS V3.01.任何线索?

android adb android-studio-3.0

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

如何使用apksigner打印APK的证书

如何找到用于签署我的 APK 文件的证书?

apksigner这在 SO 问题 7104624、 developer.android.com 上的文档和其他地方进行了讨论。他们都说在验证命令行上使用选项“--print-certs” apksigner。但我总是收到错误消息unsupported option: --print-certs

我已经尝试apksigner.bat过各个版本26.0.227.0.2并且26.0.3结果都相同。

我可能在做一些愚蠢的事情,但我不知道那是什么。有人有类似的经历吗?

android apk apksigner

2
推荐指数
1
解决办法
2356
查看次数

Bash 中的按位运算

如何对 Bash 变量进行按位 AND 运算?我想测试程序退出代码中的各个位。就像是:

myprog
BITS=$?
if [ $BITS & 4 ]; then
  echo "Bit 2 set"
fi
Run Code Online (Sandbox Code Playgroud)

建议?

bash bit-manipulation

2
推荐指数
1
解决办法
930
查看次数

gcc 参数:-pthread。它有什么作用?

我开始在 Debian 8 下使用 gcc 进行多线程编程。我已经成功编写并运行了一个多线程测试应用程序 (foobar.c),但我对 Makefile 感到困惑(从示例中复制)。特别是,有效的命令是

gcc foobar.c -o foobar -pthread
Run Code Online (Sandbox Code Playgroud)

我对“-pthread”感到困惑。就是它

(a) 值为“thread”的选项“-p”,或
(b) 参数“-pthread”?

如果是任何一种情况,它实际上在做什么?包括一些图书馆?包括一些对象?设置其他选项?

顺便说一句 - 一个类似的问题15929739被问到但从未得到回答。问题20924412也没有帮助。

multithreading gcc pthreads compiler-flags

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

Java:通过方法调用修改对象

我读过无数遍,在 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)

java methods parameter-passing

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