Воспроизведение видео Когда интернета не существует

Я разрабатываю приложение для 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

Другие вопросы по тегам