안드로이드에서 전화 네트워크가 꺼질 때를 확인하고 싶습니다. 그 사건을 포착 할 수 있습니까?네트워크 수신기 안드로이드
올바른 API 또는 동일한 설명을하는 예제가 없습니다. 누군가가했거나 예제 링크가 도움이된다면.
안드로이드에서 전화 네트워크가 꺼질 때를 확인하고 싶습니다. 그 사건을 포착 할 수 있습니까?네트워크 수신기 안드로이드
올바른 API 또는 동일한 설명을하는 예제가 없습니다. 누군가가했거나 예제 링크가 도움이된다면.
새로운 자바 클래스 다음 "매니페스트"요소 아래에 당신의 AndroidManifest.xml에서
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();
}
}
}
새로운 XML :
<!-- Needed to check when the network connection changes -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
"응용 프로그램"요소 아래에 당신의 AndroidManifest.xml에서
새로운 XML :
<receiver android:name="com.blackboard.androidtest.receiver.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
위의 대답은 모바일 패킷 데이터가 활성화 된 경우에만 작동합니다. 그렇지 않으면 ConnectivityManager가 null이되어 더 이상 NetworkInfo를 검색 할 수 없습니다. 대신 PhoneStateListener 또는 TelephonyManager를 사용하는 것이 좋습니다.
저는 작은 설정을 사용하여 이미지와 같은 사물의 크기를 조정하는 방법을 결정하기 위해 대역폭을 확인했습니다. AndroidManifest를의 활동에서
:
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;
}
사용 예는 다음과 같습니다 :
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
}
그것은의 검사가 수행되고있는 활동에
<intent-filter>
...
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
가장 예쁜 것은 아니지만 충분한 유연성을 제공하여 항목 de 대역폭 컷오프를 변경할 수 있습니다. 그들이하는 일과 그들에 대한 나의 요구 사항에 대해 계류 중이다.
발견이 매우 유용, 고마워 :) – Skynet
Android Annotations를 사용하여 당신은 당신의 활동이 시도에 대한 옵션이있는 경우 - 그 나머지는 생성, 전부가 :
@Receiver(actions = ConnectivityManager.CONNECTIVITY_ACTION,
registerAt = Receiver.RegisterAt.OnResumeOnPause)
void onConnectivityChange() {
//react
}
사용이 만 이미 AndroidAnnotations 사용하는 경우 -에만 프로젝트 내에서이 종속성 퍼팅을 이 코드 조각은 과도 할 것입니다.
이 답변에 대한 자세한 설명을 해주실 수 있습니까? 나는 뭔가를 찾으려고 노력했지만 나는 할 수 없었다. Google 어노테이션 라이브러리에는 @Receiver 주석이 없습니다. 감사! – Sniper
안녕하세요, 제 3 자 라이브러리 AndroidAnnotations를 참조합니다. 내 대답을 업데이트합니다. –
네, 맞습니다.이 라이브러리로 가능하며 또한이 https://github.com/jd-alexander/flender가 나쁘지는 않은지 확인했지만 gradle 빌드 1에서만 사용할 수 있습니다.3, 새로운 빌드 gradle 플러그인이 작동하지 않습니다 – Sniper
안녕하십니까. @noillusioin이 말한대로 – Sam97305421562
님께 감사 드리며, activeNetInfo는 null 일 수 있습니다. 이는 이전에 연결되었다는 것을 (상태 저장) 알면 네트워크 연결이 단지 단절되었음을 나타냅니다. – larham1
또한 NetworkInfo.isConnected를 확인해야합니다. – shuriquen