Воспроизведение видео Когда интернета не существует
Я разрабатываю приложение для Android о VideoPlayer. Я играю видео в интернете, но хочу играть, когда устройство Android не подключается к интернету. Я так думаю, во-первых, я устанавливаю видео из внутренней сети в приложение, и если на устройстве есть интернет, оно воспроизводится из интернета, но если интернета не существует, его следует воспроизводить в приложении. Как я могу это сделать? Мой код ниже
Открытый класс AndroidVideoPlayer расширяет Activity реализует SurfaceHolder.Callback, OnClickListener {
WakeLock wakeLock;
MediaPlayer mediaPlayer;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean pausing = false;;
Timer timer;
int maxVolume = 50;
int userInteractionTimeout;
Button sound;
int currentVolume;
String url = "http://www.androidbegin.com/tutorial/AndroidCommercial.3gp";
/** Called when the activity is first created. */
ConnectivityManager cm;
NetworkInfo activeNetwork;
boolean isConnected;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
try {
// REQUIRES ROOT
Build.VERSION_CODES vc = new Build.VERSION_CODES();
Build.VERSION vr = new Build.VERSION();
String ProcID = "79"; // HONEYCOMB AND OLDER
// v.RELEASE //4.0.3
if (vr.SDK_INT >= vc.ICE_CREAM_SANDWICH) {
ProcID = "42"; // ICS AND NEWER
}
// REQUIRES ROOT
Process proc = Runtime.getRuntime().exec(
new String[] {
"su",
"-c",
"service call activity " + ProcID
+ " s16 com.android.systemui" }); // WAS
// 79
proc.waitFor();
} catch (Exception ex) {
// Toast.LENGTH_LONG).show();
}
setContentView(R.layout.main);
cm = (ConnectivityManager) getApplicationContext().getSystemService(
Context.CONNECTIVITY_SERVICE);
activeNetwork = cm.getActiveNetworkInfo();
isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
Log.i("@mle", "" + isConnected);
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK,
"Full Wake Lock");
sound = (Button) findViewById(R.id.btn_volume);
sound.setOnClickListener(this);
sound.setVisibility(View.VISIBLE);
sound.setBackgroundColor(Color.TRANSPARENT);
// AudioManager audio = (AudioManager)
// getSystemService(Context.AUDIO_SERVICE);
// currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
/*
* timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() {
*
* @Override public void run() { if (userInteractionTimeout == 15) { //
* Do your @Override
*
* timer.cancel(); Intent intent = new Intent(getApplicationContext(),
* MainActivity.class); intent.putExtra("EXIT", false);
* intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
* startActivity(intent);
*
* } userInteractionTimeout++; } }, 0, 1000);
*/
getWindow().setFormat(PixelFormat.UNKNOWN);
// Displays a video file.
VideoView mVideoView = (VideoView) findViewById(R.id.videoview);
// String uriPath = "android.resource://com.example.anket1/"
// + R.raw.ucz_video;
// Uri uri = Uri.parse(uriPath);
// mVideoView.setVideoURI(uri);
// mVideoView.requestFocus();
if (isConnected == true) {
DownloadFromUrl(url, "file");
/*
* mVideoView.setVideoPath(url);
*
* mVideoView.start();
*
* // video finish listener mVideoView .setOnCompletionListener(new
* MediaPlayer.OnCompletionListener() {
*
* @Override public void onCompletion(MediaPlayer mp) { // not
* playVideo // playVideo();
*
* mp.start(); } });
*/
}
else {
String uriPath = "android.resource://com.example.anket1/"
+ R.raw.ucz_video;
Uri uri = Uri.parse(uriPath);
mVideoView.setVideoURI(uri);
mVideoView.start();
// video finish listener
mVideoView
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// not playVideo
// playVideo();
mp.start();
}
});
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
wakeLock.acquire();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
wakeLock.release();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
Intent intent = new Intent(getApplicationContext(),
MainActivity.class);
intent.putExtra("EXIT", false);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
break;
/*
* case MotionEvent.ACTION_MOVE: // finger moves on the screen break;
*
* case MotionEvent.ACTION_UP: // finger leaves the screen break;
*/
}
// tell the system that we handled the event and no further processing
// is required
return true;
}
public String DownloadFromUrl(String DownloadUrl, String fileName) {
File SDCardRoot = null;
try {
SDCardRoot = Environment.getDataDirectory();
File files = new File(SDCardRoot + fileName);
int sizeoffile;
if (!files.exists()) {
File root = android.os.Environment.getDataDirectory();
File dir = new File(root.getAbsolutePath());
if (dir.exists() == false) {
dir.mkdirs();
}
URL url = new URL(DownloadUrl);
File file = new File(dir, fileName);
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
sizeoffile = ucon.getContentLength();
Log.d("SIZEOFFILE: ", sizeoffile + " BYTE");
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to
* read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
/* Convert the Bytes read to a String. */
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
}
} catch (IOException e) {
e.getMessage();
}
return SDCardRoot + fileName;
}
/*
* @Override public void onUserInteraction() { // TODO Auto-generated method
* stub super.onUserInteraction();
*
* userInteractionTimeout = 0;
*
* // Log.d(LOG_TAG,"User Interaction : "+userInteractionTimeout);
*
* }
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_volume:
Intent pas = new Intent(getApplicationContext(),
SetVolumeLevel.class);
startActivity(pas);
break;
default:
break;
}
}
2 ответа
Если интернет доступен, сначала скачайте видео, вы можете использовать следующие коды:
public String DownloadFromUrl(String DownloadUrl, String fileName) {
File SDCardRoot = null;
try {
SDCardRoot = Environment.getExternalStorageDirectory();
File files = new File(SDCardRoot+fileName);
int sizeoffile;
if(!files.exists())
{
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath());
if(dir.exists()==false) {
dir.mkdirs();
}
URL url = new URL(DownloadUrl);
File file = new File(dir, fileName);
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
sizeoffile = ucon.getContentLength();
Log.d("SIZEOFFILE: ", sizeoffile+" BYTE");
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
/* Convert the Bytes read to a String. */
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
}
}
catch (IOException e) {
e.getMessage();
}
return SDCardRoot+fileName;
}
Затем просто проверьте, доступен ли интернет, затем играйте через интернет, а затем воспроизводите видео, которое уже есть на вашем SD.
Определите, есть ли у вас подключение к Интернету Нет необходимости планировать обновление на основе интернет-ресурса, если вы не подключены к Интернету. В следующем фрагменте показано, как использовать ConnectivityManager для запроса активной сети и определения наличия подключения к Интернету.
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
Пожалуйста, проверьте документы, прежде чем спрашивать о stackru:-)
Ура!
источник: http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html