我正在使用VideoView播放視頻。在播放視頻時我需要處理中間連接丟失連接。目前,當播放視頻時設備失去互聯網連接 - 播放器凍結,沒有其他事情發生。謝謝!如何定義網絡在播放視頻時會失去連接?
0
A
回答
1
您應該實現一個內部擴展類廣播接收器,將回應「android.net.conn.CONNECTIVITY_CHANGE」,並顯示一個對話框,烤麪包或者不管你選擇。
請參閱處理連接更改的官方文檔:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html#MonitorChanges。
檢查該鏈接的示例代碼:http://thiranjith.com/2011/03/31/how-to-monitor-network-connectivity-in-android/
問候
0
你可以管理連接:
public class InternetManager extends BroadcastReceiver {
/**
* PRIVATE ATTRIBUTES
*/
private Context _context;
private boolean _noConnectivity;
private String _reason;
private boolean _isFailover;
private NetworkInfo _currentNetworkInfo;
private NetworkInfo _otherNetworkInfo;
/**
* Constructeur
*
* @param context
* (this, activity...)
*/
public InternetManager(Context context) {
this._context = context;
}
/**
* Methode qui retourne true si le telephone est connecte a Internet sinon false
*
* @return
*/
public boolean isConnected() {
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) {
return true;
}
}
return false;
}
public static NetworkInfo getNetworkInfo(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo();
}
public static boolean isConnected(Context context) {
NetworkInfo info = getNetworkInfo(context);
return (info != null && info.isConnected());
}
public static boolean isConnectedWifi(Context context) {
NetworkInfo info = getNetworkInfo(context);
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI);
}
public static boolean isConnectedMobile(Context context) {
NetworkInfo info = getNetworkInfo(context);
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE);
}
public static boolean isConnectedFast(Context context) {
NetworkInfo info = getNetworkInfo(context);
return (info != null && info.isConnected() && isConnectionFast(info.getType(), info.getSubtype()));
}
private static boolean isConnectionFast(int type, int subType) {
if (type == ConnectivityManager.TYPE_WIFI) {
return true;
}
else if (type == ConnectivityManager.TYPE_MOBILE) {
switch (subType) {
case TelephonyManager.NETWORK_TYPE_1xRTT:
return false; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_CDMA:
return false; // ~ 14-64 kbps
case TelephonyManager.NETWORK_TYPE_EDGE:
return false; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return true; // ~ 400-1000 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return true; // ~ 600-1400 kbps
case TelephonyManager.NETWORK_TYPE_GPRS:
return false; // ~ 100 kbps
case TelephonyManager.NETWORK_TYPE_HSDPA:
return true; // ~ 2-14 Mbps
case TelephonyManager.NETWORK_TYPE_HSPA:
return true; // ~ 700-1700 kbps
case TelephonyManager.NETWORK_TYPE_HSUPA:
return true; // ~ 1-23 Mbps
case TelephonyManager.NETWORK_TYPE_UMTS:
return true; // ~ 400-7000 kbps
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
default:
return false;
}
}
else {
return false;
}
}
/**
* Enregistre l'observateur de connectivité
*/
public void registerReceivers() {
_context.registerReceiver(this, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
/**
* Observateur
*/
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager tm = (TelephonyManager) _context.getSystemService(Context.TELEPHONY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
// detail
_noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
_reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
_isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
_currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_EXTRA_INFO);
_otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
if (_noConnectivity) {
Toast.makeText(_context, "No connectivity", Toast.LENGTH_SHORT).show();
}
else {
if (isConnectedFast(_context)) {
Toast.makeText(_context, "Good connexion", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(_context, "Bad connexion", Toast.LENGTH_SHORT).show();
}
}
}
}
相關問題
- 1. 如何在iOS中播放從網絡接收的視頻流?
- 2. 當我連接網絡服務器時,如何在網絡瀏覽器上播放視頻?
- 3. 本地視頻只播放時,我以前播放網絡視頻 - AVFoundation
- 4. Android從自定義網絡流播放視頻數據?
- 5. YouTube視頻400網絡時,嘗試播放視頻
- 6. 如何播放24小時視頻的一部分網絡
- 7. Google Play網絡視頻播放器API
- 8. 通過網絡同步視頻播放
- 9. 如何在丟失連接時配置HTML5播放器緩存視頻?
- 10. 如何播放來自網絡的視頻,如基夫在youtube
- 11. ZMQ Pub-Sub程序在失去網絡連接時失敗
- 12. 上傳大視頻時網絡連接丟失
- 13. 與網絡失去連接:: SSH :: Perl的
- 14. 如何在網絡瀏覽器中播放MKV視頻
- 15. 如何播放視頻在iPad的網絡應用程序
- 16. 如何播放視頻網頁視圖
- 17. HTML5視頻 - Safari不會播放過去的第二個視頻
- 18. 在Android設備上的網絡上播放視頻在線播放還是在視頻應用中播放?
- 19. 鉻 - 不播放多個視頻 - 網絡卡在待定
- 20. 支持所有視頻格式的網絡視頻播放器
- 21. 在視頻播放中播放視頻
- 22. 如何連接網絡播放器與互聯網
- 23. 直接從網絡流(http)播放媒體(視頻)
- 24. 如果網絡連接丟失,Android廣播接收器會失敗?
- 25. 如何連續播放視頻?
- 26. 如何在YouTube上播放器上播放視頻網址(Android)
- 27. 如何從網絡服務加載和播放視頻
- 28. 如何在播放視頻文件時播放剩餘時間?
- 29. 如何在視頻播放器中播放視頻
- 30. 如何在android中自定義網頁視圖中播放多次視頻?