是否可以通过Wi-Fi连接两部Android手机,而无需使用蓝牙/ GSM/CDMA/IR?此外,没有任何笔记本电脑或Wi-Fi接入点或Wi-Fi路由器.
我认为,可以在两部手机上创建一些SSID,进行静态配置IP地址.android会连接到另一个的Android wi-fi吗?
如果它们将被连接,我如何将文件从一部手机发送到第二部?有ftp客户端和服务器吗?或者我可以ssh到其他手机?还是telnel/netcat?也许http?
我的手机已被锁定(模式尝试次数过多).要解锁,我需要在我的Gmail帐户上输入用户名和密码.这是我解锁它的唯一方法.我无法启动任何活动,甚至打开wifi连接.没有互联网连接,我无法登录恢复手机.
也许在adb中有任何命令打开我的wifi连接,所以我可以使用我的手机?
我的Android应用可以找到它所连接的Wifi接入点的MAC地址吗?
android.net.wifi.WifiInfo getMacAddress()的文档不提供任何详细信息.请参阅http://developer.android.com/reference/android/net/wifi/WifiInfo.html#getMacAddress().我假设这是我手机的Mac地址.我可以找到接入点的Mac地址吗?
我正在开发一款可以在手机上运行的应用程序,该手机将成为私人Wi-Fi网络上的一个电台.电话将是电台,而不是接入点,私人Wi-Fi网络不会路由到互联网.我的应用程序需要与Internet上的服务器以及本地Wi-Fi网络上的设备进行通信,因此需要在两个网络上同时进行连接.我一直试图弄清楚如何做到这一点.
我一直在尝试在Google Android开发者小组讨论中描述的技术,题为"Android 2.X可以同时连接到3G和Wifi数据网络吗?",但它运行不佳.我发现,当我通过呼叫启用蜂窝网络时
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE),我在Wi-Fi网络上打开的任何插座都将关闭.我没有尝试过,但我怀疑当我切换回Wi-Fi时蜂窝网络上的插座会发生同样的事情.
另一个问题是,这些呼叫在全球范围内运行,改变了整个电话的网络设置,而不仅仅是应用程序.像这样在全球范围内切换网络设置会干扰恰好在手机上运行的任何其他应用程序.即使在我的应用程序退出后,手机仍会继续运行它设置的最后一个网络配置.
我正在寻找一种方法,同时在蜂窝数据和Wi-Fi网络上打开连接,而不会干扰手机上运行的其他应用程序.
1.有谁知道怎么做?
2.有人知道这是否可行?
谢谢你的帮助.
我正在编写一个Android应用程序,它将连接到特定的WPA访问点,连接后,它将发出一个http调用.它不会保存网络配置.我已经阅读了连接到wifi网络上几乎所有关于堆栈溢出的帖子,但找不到对我有用的答案.这是我用来连接的代码..
WifiConfiguration wc = new WifiConfiguration();
wc.allowedAuthAlgorithms.clear();
wc.allowedGroupCiphers.clear();
wc.allowedPairwiseCiphers.clear();
wc.allowedProtocols.clear();
wc.allowedKeyManagement.clear();
wc.SSID = "\"".concat("<ssid>").concat("\"");
wc.preSharedKey = "\"".concat("<password>").concat("\"");
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); // For WPA2
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); // For WPA
wc.priority = 0;
//wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
// connect to and enable the connection
WifiManager wifiManager = (WifiManager) getSystemService(this.WIFI_SERVICE);
int netId = wifiManager.addNetwork(wc);
boolean wifiEnabled = wifiManager.enableNetwork(netId, true);
wifiManager.setWifiEnabled(true);
Log.d("opener", "addNetwork returned " + netId);
if (netId > 0) {
wifiId = netId;
}
Run Code Online (Sandbox Code Playgroud)
但是netId总是-1.我在两部不同的手机上试过它(ICS:HTC Rezound和GingerBread:摩托罗拉DroidX).两者显示完全相同的结果.我究竟做错了什么? …
我希望标题本身说明我的问题是什么......
例如,我们可以使用PackageManager检查Wifi的可用性
packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI);
Run Code Online (Sandbox Code Playgroud)
同样有没有办法以编程方式检测Android中的移动热点功能可用性?
谢谢.
我有一个带有WiFi锁的Android前台服务,它充当另一个本地设备的Web服务.在打盹模式之前,获取WiFi锁并根据需要提供服务非常有效.
即使关闭了我的应用程序的电池优化功能,当屏幕关闭几分钟时,手机仍然会杀死应用程序.
如何正确警告Android明确地在前台执行客户请求的服务,并且他们此时不希望他们的手机进入睡眠状态?
编辑:这个问题仍然存在于Android 8.0(奥利奥)
我正在建立一个VoIP应用程序.当用户在WiFi与移动数据之间切换时,在VoIP呼叫期间,我在处理场景时遇到问题.
在我的通话屏幕活动中,我已注册接收器,这有助于我获得有关网络更改方案的通知.
这是我用于检测onRecieve方法中网络变化的代码.
conn_name是包含先前连接名称的私有类级别变量.
ConnectivityManager connectivity_mgr = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
NetworkInfo net_info = connectivity_mgr.getActiveNetworkInfo();
if (net_info != null && net_info.isConnectedOrConnecting() && !conn_name.equalsIgnoreCase("")) {
new_con = net_info.getExtraInfo();
if (new_con != null && !new_con.equalsIgnoreCase(conn_name))
network_changed = true;
conn_name = (new_con == null) ? "" : new_con;
connectionStatus ="connected";
} else {
if (net_info != null && conn_name.equalsIgnoreCase("")){
conn_name = net_info.getExtraInfo();
connectionStatus ="connected";
network_changed = true;
}else if(!new_con.equals(conn_name)) {
conn_name = "";
connectionStatus ="disconnected";
network_changed = true;
}
}
Run Code Online (Sandbox Code Playgroud)
所以使用上面的方法我能够检测网络变化.但是当我与WiFi连接时会发生一件奇怪的事情.
当我的应用程序最初启动时,它与移动数据连接.当用户进入他已知的WiFi区域时,他连接到他已知的WiFi.由于WiFi总是被选为默认路由,因此android会切换到WiFi,我会收到WiFi已经打开的网络通知.所以我将我的应用IP地址更新为WiFi IP地址.这里没有问题.但是移动数据仍然是连接的同时getActiveNetworkInfo() …
networking android android-wifi mobile-data android-connectivitymanager
我正在尝试安装证书而不提示用户.我知道这不是好习惯,但这就是PM想要的.
使用KeyChain.createInstallIntent(),我可以通过调用让Android启动证书安装对话框startActivity.但是,当我通过意图时sendBroadcast,没有任何反应.出于安全考虑,平台可能不支持此功能吗?
String CERT_FILE = Environment.getExternalStorageDirectory() + "/test/IAT.crt";
Intent intent = KeyChain.createInstallIntent();
try {
FileInputStream certIs = new FileInputStream(CERT_FILE);
byte [] cert = new byte[(int)certFile.length()];
certIs.read(cert);
X509Certificate x509 = X509Certificate.getInstance(cert);
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded());
intent.putExtra(KeyChain.EXTRA_NAME, "IAT Cert");
EapActivity.this.startActivityForResult(intent, 0); // this works but shows UI
EapActivity.this.sendBroadcast(intent); // this doesn't install cert
} catch (IOException e) {
Run Code Online (Sandbox Code Playgroud) 我想开发一个可以阻止连接到WiFi网络的应用程序,除非我批准它.我希望能够查询接入点的MAC地址,并将其与SSID对应的已知地址列表进行比较.该应用程序的目标是保护用户免于意外连接到恶意访问点,例如可以使用菠萝设备生成的类型.
我不清楚我的研究如何实现这一目标.诸如如何通知wifi网络状态变化等问题?解释如何检测连接已经发生,但对于我的用例已经太晚了.
无论是ConnectivityManager 也WifiManager似乎提供方法补充说,可能会打断正在进行的连接监听器.
我有一些解决方案的想法:
安装自己作为代理,并决定是否允许数据通过.但是,这似乎不是基于Do Android代理设置适用于设备上的所有应用程序的选项吗?(提示:答案是"不").
用我自己创建的东西替换现有的WiFi管理器.但是,我真的很难在Android开发人员指南中找到有关更换系统组件的任何信息.因此,我不确定这在非根电话上是否可行.
将网络密码存储在我的应用程序中,并将WiFi管理器中的密码设置为无意义的值.然后捕获一个广播消息,警告连接失败(可能是类似的东西.我发现菠萝设备可能会接受任何密码,从而使这种方法无效.WifiManager.WPS_AUTH_FAILURE)并有选择地决定重新连接回该网络.可能是一个可能的(如果丑陋的)解决方案,但我可以在网络仍然连接时将密码设置回无意义的值,以确保我们不会安静地连接到另一个同名的SSID吗?我不确定
找到一些方法来阻止Android自动连接到已知网络(即之前使用过的网络或者密码存储在其中).然后我可以管理我的应用程序中的所有连接/断开连接.但是,我无法在手机上看到如何手动执行此操作,因此我怀疑这是可行的.
任何人都可以建议一种可以在非根电话上运行的方法吗?
android ×10
android-wifi ×10
wifi ×3
wifimanager ×2
android-connectivitymanager ×1
android-doze ×1
java ×1
mobile-data ×1
networking ×1
security ×1