SDK:Android 5.0.1.
Android版本:LRX22C.
设备:Nexus 5.
问题:KITKAT(4.4.4)及以下API
1)startUsingNetworkFeature(int networkType, String feature)
不推荐使用此方法.不赞成使用清洁剂requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback).
2)requestRouteToHost(int networkType, int hostAddress)
不推荐使用此方法.贬低赞成requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback),setProcessDefaultNetwork(Network)和getSocketFactory().
用于在WIFI和移动数据打开时通过移动数据网络发送请求.
启动Android L后,API已弃用,不再有效.
新的API /类NetworkRequest.Builder,NetworkRequest,ConnectivityManager.NetworkCallback,requestNetwork,registerNetworkCallback分别使用.
详细信息这里有关于API使用
Android L API的信息
码:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
NetworkRequest networkRequest = builder.build();
connectivityManager.requestNetwork(networkRequest, networkCallback);
connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
Run Code Online (Sandbox Code Playgroud)
工作场景:
仅onAvailable接收回调上的移动数据.
不工作场景:移动和Wifi都已打开并连接,onAvailable未从系统接收回叫.因此无法设置setProcessDefaultNetwork,
ConnectivityManager.setProcessDefaultNetwork(preferedNetwork);
经常:永远
预期输出:当wifi打开时获取移动网络avaliabe回调. …
首先:我知道ConnectivityManager.CONNECTIVITY_ACTION已被弃用,我知道如何使用connectivityManager.registerNetworkCallback.如果阅读JobScheduler,但我不完全确定我是否正确.
我的问题是,当手机与网络连接/断开连接时,我想执行一些代码.这应该在应用程序也在后台时发生.从Android OI开始,如果我想在后台运行我想要避免的服务,则必须显示通知.
我尝试获取有关手机何时使用JobScheduler/JobServiceAPI 连接/断开连接的信息,但它只会在我安排它时执行.对我来说,似乎在这样的事件发生时我无法运行代码.有没有办法实现这个目标?我可能只需要稍微调整一下我的代码吗?
我的JobService:
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class ConnectivityBackgroundServiceAPI21 extends JobService {
@Override
public boolean onStartJob(JobParameters jobParameters) {
LogFactory.writeMessage(this, LOG_TAG, "Job was started");
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork == null) {
LogFactory.writeMessage(this, LOG_TAG, "No active network.");
}else{
// Here is some logic consuming whether the device is connected to a network (and to which type)
}
LogFactory.writeMessage(this, LOG_TAG, "Job is done. ");
return …Run Code Online (Sandbox Code Playgroud)