11

私はrildと話すためのアプリを書こうとしています。はい、これは政治的に正しくないことはわかっていますが、組み込みの産業用テレメトリアプリなので、ユーザーエクスペリエンス、移植性などについては心配していません。

問題は、接続しようとすると、java.ioの「アクセスが拒否されました」という例外が発生することです。誰か助けてもらえますか?

電話(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 );
}

/ 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

ダイヤラアプリがすでに接続されていて、ソケットを占有している可能性がありますか?

ところで、私は最初にフレームワークを使おうとしましたが、主にJavaやサードパーティのクラスに関するエラーが大量に発生したため、何日も髪を引っ張った後、あきらめました。私もSTFWとこのサイトを持っています-この問題についてはたくさん踊っていますが、具体的なアドバイスはありません。

どんな助けでも大歓迎です。-ジョン

4

2 に答える 2

8

rildソケットのJava側には、com.android.phone.PhoneApp.java所有するcom.android.internal.telephony.RIL.javaのインスタンスがあります。PhoneAppは、当然のことながら、電話機能を提供する永続的なアプリです。PhoneAppを無効にすると、Java側でのrildソケットの使用がすべて終了します。

また、未使用の「rild-debug」に接続してみることもできます(ただし、ril-daemonでは無視される場合があります)。

ところで-logcat-bradioを実行すると、RILレイヤー間の通信を確認できます。

回避策を思いついた場合は、投稿してください。

于 2012-02-16T16:16:02.030 に答える
1

Androidの最近のバージョン(およびおそらく以前のバージョン)ではrild-debug、すべての範囲のコマンドを受け入れることを意図していません。事前定義されたコマンドのみが受け入れられます。

ここでril.cppをチェックしてください。

static void debugCallback (int fd, short flags, void *param)
...

    case 0:
        LOGI ("Connection on debug port: issuing reset.");
        issueLocalRequest(RIL_REQUEST_RESET_RADIO, NULL, 0);
        break;
    case 1:
        LOGI ("Connection on debug port: issuing radio power off.");
        data = 0;
        issueLocalRequest(RIL_REQUEST_RADIO_POWER, &data, sizeof(int));
        // Close the socket
        close(s_fdCommand);
        s_fdCommand = -1;
        break;

UPD:また、RILリクエストには増分番号が付けられており、シリーズ外のイベントを発行することで、ril/phoneappのペアリングを効果的に解除するのは非常に簡単です。

于 2013-11-27T10:14:46.743 に答える