我的Android手机的Restful(或其他)网关/包装API

时间:2013-09-30 13:51:23

标签: android api

是否有一个应用程序可以通过LAN公开所有Android手机的原生API?

您可以下载至少一个好的应用程序,它允许通过一个安静的API发送和接收短信。但是,它是由其他开发人员制作的,因此我无法100%确定安全性。此外,我想访问一切,而不仅仅是短信。

我尝试在线搜索,但没有任何内容或搜索词组合类似于强制密码。

我希望能够通过我选择的语言将桌面集成系统变得有趣。

我认为解决方案是在我的手机上运行的服务,可以完全访问所有手机功能,需要安全的API密钥。它将放在我的桌面上,插入充电器,所以我不关心电源效率(轮询),但是双绑定模型会很吸引人(注册一个回调端点,在收到短信等电话事件时调用,或者电话铃声等。)。

有什么想法吗?我需要自己制作吗?

2 个答案:

答案 0 :(得分:0)

在系统应用正在进行网络工作(主要是媒体同步,消息同步)时,您可能需要采取的实际示例来捕获REST /网络调用层...

假设您要拦截照片库应用程序在同步其媒体时所做的REST调用...

包装与您的Rest api相关的HttpClient的网络调用被封装在一个非常深入且非常专有的堆栈中,您可以对here

进行鉴赏

查看'loadMediaSets()','loadMediaSet()',并注意没有涉及HttpClient或rest的接口。网络涉及'dataInputStreams',它由一个你不能期望观察或过载的不同(非Rest)接口包裹。

在系统应用程序中通过网络传播媒体并不值得尝试简单了解REST Api。

如果您花费大量时间使用Android API,您可以提供一个客户端事件列表,例如'OnNewTextMessage'或状态栏中的某些内容。同样,对于您希望拦截的每种媒体类型,这将是很多低级别的工作。

答案 1 :(得分:0)

好的,不是单一的应用解决方案,而是您可以做的事情:

  • 短信 - 使用短信网关。当短信到达时,此应用将发布到您选择的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
    }
}

使用Inertia类与WinForms一起使用:

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)
        {
        }

    }
}