Je veux vérifier si le réseau de téléphone Android, et s'en va. Puis-je capturer cet événement? Je ne reçois pas la bonne API ou un exemple qui pourrait expliquer la même chose. Si quelqu'un a fait ou n'importe quel exemple de liens serait vraiment utile. Merci à l'avance.
Réponses
Trop de publicités?Nouvelle classe java:
public class ConnectionChangeReceiver extends BroadcastReceiver
{
@Override
public void onReceive( Context context, Intent intent )
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE );
if ( activeNetInfo != null )
{
Toast.makeText( context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
}
if( mobNetInfo != null )
{
Toast.makeText( context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show();
}
}
}
New xml dans votre AndroidManifest.xml dans le cadre du "manifeste" de l'élément:
<!-- Needed to check when the network connection changes -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
New xml dans votre AndroidManifest.xml en vertu de la "demande" de l'élément:
<receiver android:name="com.blackboard.androidtest.receiver.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
J'ai été en utilisant une configuration de petite taille pour vérifier la bande passante pour déterminer comment faire évoluer les choses, comme les images.
En vertu de l'activité, dans AndroidManifest:
<intent-filter>
...
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
Dans l'activité où les vérifications sont effectuées:
boolean network;
int bandwidth;
@Override
public void onCreate(Bundle savedInstanceState) {
...
network = isDataConnected();
bandwidth = isHighBandwidth();
registerReceiver(new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
network = isDataConnected();
bandwidth = isHighBandwidth();
}
}, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
...
}
...
private boolean isDataConnected() {
try {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
} catch (Exception e) {
return false;
}
}
private int isHighBandwidth() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
return wm.getConnectionInfo().getLinkSpeed();
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return tm.getNetworkType();
}
return 0;
}
Un exemple d'utilisation serait alors:
if (network) {
if (bandwidth > 16) {
// Code for large items
} else if (bandwidth <= 16 && bandwidth > 8) {
// Code for medium items
} else {
//Code for small items
}
} else {
//Code for disconnected
}
Ce n'est pas la plus jolie, mais il laisse suffisamment de souplesse que je peux changer la largeur de la bande de coupure pour les éléments en fonction de ce qu'ils sont et mes exigences.
Si vous utilisez Android Annotations est une option pour vous, que je recommande, essayez ceci dans vos activités - c'est tout, le reste est généré:
@Receiver(actions = ConnectivityManager.CONNECTIVITY_ACTION,
registerAt = Receiver.RegisterAt.OnResumeOnPause)
void onConnectivityChange() {
//react
}
p.s.: bien sûr, vous devez toujours déclarer les autorisations dans votre manifeste