yongjhih/rx-net


Reactive network for Android

Download


Step 1. Add the JitPack repository to your build file

Add it in your root settings.gradle at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url 'https://jitpack.io' }
		}
	}

Add it in your settings.gradle.kts at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Add to pom.xml

	<repositories>
		<repository>
		    <id>jitpack.io</id>
		    <url>https://jitpack.io</url>
		</repository>
	</repositories>

Add it in your build.sbt at the end of resolvers:

 
    resolvers += "jitpack" at "https://jitpack.io"
        
    

Add it in your project.clj at the end of repositories:

 
    :repositories [["jitpack" "https://jitpack.io"]]
        
    

Step 2. Add the dependency

	dependencies {
		implementation 'com.github.yongjhih:rx-wifi:0.0.4'
	}
	dependencies {
		implementation("com.github.yongjhih:rx-wifi:0.0.4")
	}
	<dependency>
	    <groupId>com.github.yongjhih</groupId>
	    <artifactId>rx-wifi</artifactId>
	    <version>0.0.4</version>
	</dependency>

                            
    libraryDependencies += "com.github.yongjhih" % "rx-wifi" % "0.0.4"
        
        

                            
    :dependencies [[com.github.yongjhih/rx-wifi "0.0.4"]]
        
        

Readme


RxNet

CircleCI codecov

Usage

Scan:

RxWifi.scan(context).subscribe { scanResult ->
  println(scanResult)
}

Connect:

RxWifi.connects(context, ssid, password)
   .subscribe({
     println(it)
   }, { e -> {
    // ssid not found
    // auth failure
    // connection failure
    // no internet?
   })

rx-connectivity

RxConnecitvity.connectivity(context).subscribe();
RxConnecitvity.internetivity(context).subscribeOn(io()).subscribe();
RxConnecitvity.isConnected(context);
RxConnectivity.defaultNetwork(context, NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build())
        .subscribe()

rx-connectivity-kotlin:

connectivityManager.defaultNetwork(NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build())
        .subscribe()

rx-wifi-kotlin:

wifiManager.scan(context).subscribe()

Installation

repositories {
    jcenter()
    maven { url "https://jitpack.io" }
}

dependencies {
    compile 'com.github.yongjhih.rx-net:rx-wifi:-SNAPSHOT'
    compile 'com.github.yongjhih.rx-net:rx-connectivity:-SNAPSHOT'
    compile 'com.github.yongjhih.rx-net:rx-connectivity-kotlin:-SNAPSHOT'
}

See Also

  • https://github.com/yongjhih/rx-receiver

Known Issue - Connection failure to a no-internet Wi-Fi with smart network routing and mobile data enabled

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val netCallback = object : ConnectivityManager.NetworkCallback() {
        override fun onAvailable(network: Network) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                ConnectivityManager.setProcessDefaultNetwork(network)
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                connectivityManager.bindProcessToNetwork(network)
            }
        }
    }
    connectivityManager.registerNetworkCallback(NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .build(), netCallback)
}

// connectivityManager.unregisterNetworkCallback(netCallback)

p.s.:

  • It not works on Samsung Note Edge, Android 6.0.1
  • It does work on Nexus Pixel, Android 7.1.1 (can also reproduce)
  • It does work on Nexus 5X, Android 7.1.1
  • It does work on Nexus 5, Android 6.0.1

LICENSE

Apache 2.0