0

Android フォンのネイティブ API をすべて LAN 経由で公開できるアプリはありますか?

安らかなAPIを介してテキストメッセージを送受信できる、ダウンロードできる優れたアプリが少なくとも1つあります. しかし、それは他の開発者によって作成されているため、セキュリティについて 100% 確信を持てません。さらに、SMS だけでなく、あらゆるものにアクセスしたい。

オンラインで検索してみましたが、そこには何もないか、検索用語の組み合わせがブルート フォースによるパスワードのようなものです。

選択した言語を使用して、デスクトップ統合システムを楽しくマッシュアップできるようになりたいです。

ソリューションは、電話で実行されるサービスであり、すべての電話機能に完全にアクセスでき、安全な API キーが必要になると思います。それは私の机の上にあり、充電器に差し込まれているので、電力効率 (ポーリング) は気にしませんが、デュアル バインド モデルが魅力的です (SMS の受信などの電話イベントで呼び出されるコールバック エンドポイントの登録、または電話の呼び出し音など)。

何か案は?これは自分で作る必要がありますか?

4

2 に答える 2

0

システム アプリがネットワーク作業を行っているときに REST/Network 呼び出しレイヤーをトラップするために実行する必要があると予想される実際の例 (主にメディアの同期、メッセージの同期)...

フォト ギャラリー アプリがメディアを同期するときに行う REST 呼び出しを傍受したいとします。

Rest API に関連する HttpClient をラップするネットワーク呼び出しは、非常に深く、非常に独自のスタックにカプセル化されており、ここで理解できます。

「loadMediaSets()」、「loadMediaSet()」を見て、HttpClient や REST を含むインターフェースがないことに注意してください。ネットワークには、観察またはオーバーロードを期待できなかった別の (非 Rest ) インターフェースによってラップされた「dataInputStreams」が含まれます。

システム アプリ内のネットワークを介したメディアの通過は、REST Api の単純なアイデアで解決しようとする価値はありません。

Android API に多くの時間を費やす場合、「OnNewTextMessage」などのクライアント側イベントのリストをステータス バーに表示できます。繰り返しになりますが、インターセプトしたいメディアの種類ごとに、多くの低レベルの作業が必要になります。

于 2013-09-30T15:25:03.480 に答える
0

さて、単一のアプリ ソリューションではありませんが、できることは次のとおりです。

  • SMS - SMS ゲートウェイを使用します。このアプリは、SMS が到着すると、選択した HTTP サーバーに投稿します
  • 加速度計 - ワイヤレス IMU を使用します。このアプリはUDP経由で送信します。これは、低遅延の操作を維持できることを意味し、ドロップされたパケットは永久に失われます。[他のアプリ オプションについては、http://www.appszoom.com/android_applications/accelerometer+sensor+values+to+computerを参照してください]
  • NFC - 見つかりません
  • 通話 - 見つかりません
  • カメラ (ストリーミング) - 見つかりません
  • 写真を撮る - 見つかりません

見つかりません - 指定された目的で開いている API アプリが見つかりません。

加速度計データの受信 - UDP

class Inertia : IDisposable
{
    UdpClient listener = new UdpClient(5555);
    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 5555);
    Control context = null;

    public Inertia(Control context)
    {
        this.context = context;
        IAsyncResult result = listener.BeginReceive(new AsyncCallback(udpCallback), null);
    }

    private void udpCallback(IAsyncResult result)
    {
        byte[] data = listener.EndReceive(result, ref groupEP);

        if (data.Length > 0)
        {
            string line = ASCIIEncoding.ASCII.GetString(data);
            if (context.InvokeRequired)
                context.BeginInvoke(UDPStringReceived, line);
            else
                if (UDPStringReceived != null) UDPStringReceived(line);
        }

        result = listener.BeginReceive(new AsyncCallback(udpCallback), null);
    }

    public delegate void UDPStringReceivedHandler(string line);
    public event UDPStringReceivedHandler UDPStringReceived;


    public void Dispose()
    {
        //TODO: Stop listening
    }
}

WinForms で使用する Inertia クラスの使用:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
    }

    Inertia inertia = null;
    void Form1_Load(object sender, EventArgs e)
    {
        inertia = new Inertia(this);
        inertia.UDPStringReceived += inertia_UDPStringReceived;
    }

    void inertia_UDPStringReceived(string line)
    {
        try
        {
            string[] components = line.Split(',');

            //My text boxes, showing the data
            t.Text = components[0];
            //index 1 contains the value 2, which probably indicates "Accelerometer" in next 3 values
            aX.Text = components[2];
            aY.Text = components[3];
            aZ.Text = components[4];
            //index 5 contains the value 3, which probably indicates "Gyroscope" in next 3 values
            gX.Text = components[6];
            gY.Text = components[7];
            gZ.Text = components[8];
        }
        catch (Exception ex)
        {
        }

    }
}
于 2013-10-01T06:22:58.840 に答える