在Android N中,官方网站上提到"针对Android N的应用不接收CONNECTIVITY_ACTION广播".并且还提到JobScheduler可以用作替代方案.但是JobScheduler它没有提供与CONNECTIVITY_ACTION广播完全相同的行为.
在我的Android应用程序中,我使用此广播来了解设备的网络状态.我想知道,如果在该状态CONNECTING或CONNECTED的帮助下CONNECTIVITY_ACTION广播和它是最适合我的要求.
现在它已被弃用,任何人都可以建议我获得当前网络状态的替代方法吗?
我尝试使用Retrofit库在Android上使用API时失败,但在使用POSTMAN时我可以看到预期的结果.
邮递员设定
api url(基地+控制器)
HTTP方法设置为POST
点击了from-data或x-www-form-urlencoded
然后我在键/值字段上传递两个参数.
ANDROID改装设置
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Query("code") String code,
@Query("monthact") String monthact,
Callback<LandingPageReport> cb);
@FormUrlEncoded
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Field("code") String code,
@Field("monthact") String monthact,
Callback<LandingPageReport> cb);
Run Code Online (Sandbox Code Playgroud)
这些选项都不起作用.但结果是{}.
UPDATE
使用标准HttpClient(和HttpPost)类的相同设置工作正常.
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("code", "testcode"));
urlParameters.add(new BasicNameValuePair("monthact", "feb-2015"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
Run Code Online (Sandbox Code Playgroud)
为什么我不能做这个请求并在Retrofit中获得正确的响应?
更新2
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Query("code") String code,
@Query("monthact") String monthact,
Callback<List<LandingPageReport>> cb);
@FormUrlEncoded
@POST("/GetDetailWithMonthWithCode")
void getLandingPageReport(@Field("code") String …Run Code Online (Sandbox Code Playgroud) 我想使用连接管理器,它提供方法getAllNetworkInfo()来检查Android中的网络可用性.此方法在API级别23中已弃用.而Developer doc建议使用getAllNetworks().我试过但是没有得到我从旧代码中获得的确切功能.请有人指导我如何使用getAllNetworks()方法.以下是我正在使用的代码:
public boolean isConnectingToInternet(){
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
@SuppressWarnings("deprecation")
NetworkInfo[] info = connectivity.getAllNetworkInfo();
//use getAllNetworks() instead
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我想使用提供方法activeNetworkInfo.type的连接管理器来检查Android中的网络类型。此方法在API级别28中已弃用。因此在API 28中检查网络类型的解决方案是什么。我的代码是:
/**
* Check Wi Fi connectivity
*/
fun isWiFiConnected(context: Context): Boolean {
val connManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return connManager.activeNetworkInfo.type == ConnectivityManager.TYPE_WIFI
}
Run Code Online (Sandbox Code Playgroud)
我的摇篮就像:
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
}
Run Code Online (Sandbox Code Playgroud) 如何以编程方式在Android设备上检查该网络是否可用,当我们尝试连接Wifi和3G等网络时,会抛出消息或Toast消息.
假设在设备上启用了WIFI和Data/3G,我如何检查用户当前是否通过wifi或数据计划使用互联网,假设它们都已启用.所以我不需要检查它们是启用还是禁用,我想检测用户实际使用的是哪一个.
我一直在做以下,这是唯一的解决方案吗?
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState.CONNECTED) {
String ssid = wifiInfo.getSSID();
}
Run Code Online (Sandbox Code Playgroud) 似乎整个 NetworkInfo在 API 29 上都被弃用了。
所以我正在寻找一种替代方法来检查网络是否已连接。例如替代
connectivityManager.activeNetworkInfo?.isConnected == true
Run Code Online (Sandbox Code Playgroud)
旁注:我知道现在有一个回调,但我想同步获取此信息。另外,当然我知道它可能不是一个精确的信息,尽管我想拥有它。
我使用以下方法来检查互联网连接:
public boolean isInternetConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)
不过,我发现NetworkInfo、getActiveNetworkInfo()、 和isConnected()现在都已弃用。我已经检查了几个线程:
ConnectivityManager getNetworkInfo(int) 已弃用
activeNetworkInfo.type 在 API 级别 28 中已弃用
不过,它们都使用已弃用的方法提供答案。我一直环顾四周,没有任何运气。是否有任何简单的方法来检查互联网连接,或者我应该继续使用我的方法并忽略已弃用的方法,因为它适用于 API29?
谢谢。
我写了这段代码.
ConnectivityManager connectivity = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {}
Run Code Online (Sandbox Code Playgroud)
但是不推荐使用getAllNetworkInfo().请帮忙.谢谢.
android ×9
networking ×3
3g ×1
android-connectivitymanager ×1
connection ×1
deprecated ×1
java ×1
kotlin ×1
post ×1
retrofit ×1
wifi ×1