我正面临2011年在跟踪器问题中报告的问题,并希望开发一个合适的解决方法.我想向用户显示所有Android设备的网络接口,并按类型分类,以及它们当前是否处于活动状态.我至少要针对API 15.
据我所知,有两种方法可以获取网络接口信息:
通过内置的Java NetworkInterface类使用NetworkInterface.getNetworkInterfaces().这将返回NetworkInterface包含如接口名称信息的对象,与接口等.对于我的设备(LG G3)相关联的所有IP地址,我得到这样的接口lo,wlan0和rmnet0.这也会返回我需要的IP地址,MTU,子网掩码和广播地址等信息.
通过Android API ConnectivityManager服务使用aConnManager.getAllNetworkInfo().这将返回约20 NetworkInfo我的设备对象,大多数是不使用的,但它们包括类型MOBILE,WIFI,BLUETOOTH,等等.这不包括任何网络参数,如IP地址,MTU等如上所述.
跟踪器中解释的问题是没有内置的方法来映射NetworkInfo到a NetworkInterface或反之亦然,我想避免使用接口名称映射到适当的,NetworkInfo如果可能的话.
既然我有预感是不可能的,那么大多数供应商的所有潜在网络接口名称中都有一个列表吗?rmnet[0-9]对于使用Qualcomm基带处理器和wlan[0-9]WiFi等设备来说似乎很常见.
在最坏的情况下,我想如果接口名称与任何常见模板不匹配,我可以将接口类型列为未知.提前致谢.
有没有人有经验(使用OpenSL ES,ALSA等)在Android中重定向音频或创建新的声音路径?最终目标是创建一个虚拟麦克风来替换外部麦克风,在那里可以播放音频文件,就好像他们正在对着麦克风讲话一样.访问麦克风的应用程序AudioSource.MIC应使用此备用流.它没有必要使用语音呼叫,我相信实现这种功能更难,因为它都是在无线电中完成的.
关于从哪里开始的任何想法?我已经用OpenSL和ALSA做了一些研究,但看起来我需要打包新固件(ROM)才能定义自定义音频路径.如果可以避免,我想创建一个应用程序级解决方案.电话是"扎根"(有su二进制文件).目标设备是三星Galaxy S4谷歌版(GT-i9505G).具体来说,我正在寻找音频驱动程序配置/源代码或i9505G的任何参考.
提前致谢!
编辑 - 我已经检查了CyanogenMod 10.2源代码树,以及jfltexx驱动程序和内核.以下是kernel/samsung/jf/sound的内容:http://pastebin.com/7vK8THcZ.这记录在哪里?
我知道通常不应该从UI线程以外的线程触摸UI元素,但我是WPF的新手,我想知道我当前的工作实现是否可以改进.
我有一个仅由通知托盘图标组成的应用程序,我想从后台线程更新该图标.
这是我的Program.cs入口点:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using (IconHandler notify = new IconHandler())
{
notify.Display();
Application.Run();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的IconHandler.cs通知图标处理程序类:
class IconHandler : IDisposable
{
NotifyIcon ni;
public IconHandler()
{
ni = new NotifyIcon();
}
public void Display()
{
ni.MouseClick += new MouseEventHandler(ni_MouseClick);
ni.Icon = Resources.icon1;
ni.Visible = true;
new Thread(new ThreadStart(UpdateIcon)).Start();
}
public void UpdateIcon()
{
while (true)
{
// reference ni directly, it updates fine
}
}
public void Dispose()
{ …Run Code Online (Sandbox Code Playgroud)