2013-12-09 83 views
0

我有来自uri的VideoView流式视频。我想在数据加载时显示ProgressDialog。但它没有显示。只有黑屏可见,而不是一段时间后开始视频。ProgressDialog未在视频加载时显示

为什么我的对话框不显示?

private static ProgressDialog pDialog; 
VideoView vid; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
          WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    setContentView(R.layout.activity_player); 

    vid = (VideoView) findViewById(R.id.videoView1); 
    pDialog = ProgressDialog.show(PlayerActivity.this, "", getString(R.string.please_wait_while_loading), true); 

    Intent intent = getIntent(); 
    String url = intent.getStringExtra(MainActivity.STREAM_URL); 
    StartPlay(url); 
} 

private void StartPlay(String url) 
{ 
    MediaController mc = new MediaController(this, false); 
    mc.setAnchorView(vid); 
    mc.setMediaPlayer(vid); 
    vid.setMediaController(mc); 
    Uri video = Uri.parse(url); 
    vid.setVideoURI(video);  
    vid.requestFocus(); 
    vid.setKeepScreenOn(true); 
    vid.setOnPreparedListener(new OnPreparedListener() 
    { 

     @Override 
     public void onPrepared(MediaPlayer mp) 
     { 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
      vid.start();  
     } 
    }); 
    vid.setOnErrorListener(new OnErrorListener() 
    { 

     @Override 
     public boolean onError(MediaPlayer mp, int what, int extra) 
     { 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 

      Intent data = PlayerActivity.this.getIntent(); 
      data.putExtra(EXTRA_MESSAGE_TITLE, getString(R.string.title_MediaPlayerError)); 
      data.putExtra(EXTRA_MESSAGE, getString(R.string.message_MediaPlayerError)); 
      setResult(RESULT_CODE_ERROR, data); 
      PlayerActivity.this.finish(); 

      return false; 
     } 
    }); 
} 

现在我知道发生了一个错误,并且对话框被解除。这个错误意味着什么?我可以修复它吗?如果使用getApplicationContext对话创造

 12-09 15:27:18.160: E/WindowManager(2277): Activity myapp.PlayerActivity has leaked window [email protected] that was originally added here 
12-09 15:27:18.160: E/WindowManager(2277): android.view.WindowLeaked: Activity myapp.PlayerActivity has leaked window [email protected] that was originally added here 
12-09 15:27:18.160: E/WindowManager(2277): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:438) 
12-09 15:27:18.160: E/WindowManager(2277): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292) 
12-09 15:27:18.160: E/WindowManager(2277): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) 
12-09 15:27:18.160: E/WindowManager(2277): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) 
12-09 15:27:18.160: E/WindowManager(2277): at android.view.Window$LocalWindowManager.addView(Window.java:558) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.Dialog.show(Dialog.java:316) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ProgressDialog.show(ProgressDialog.java:130) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ProgressDialog.show(ProgressDialog.java:113) 
12-09 15:27:18.160: E/WindowManager(2277): at myapp.PlayerActivity.onCreate(PlayerActivity.java:44) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.Activity.performCreate(Activity.java:5084) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2044) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ActivityThread.access$600(ActivityThread.java:136) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
12-09 15:27:18.160: E/WindowManager(2277): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-09 15:27:18.160: E/WindowManager(2277): at android.os.Looper.loop(Looper.java:137) 
12-09 15:27:18.160: E/WindowManager(2277): at android.app.ActivityThread.main(ActivityThread.java:4803) 
12-09 15:27:18.160: E/WindowManager(2277): at java.lang.reflect.Method.invokeNative(Native Method) 
12-09 15:27:18.160: E/WindowManager(2277): at java.lang.reflect.Method.invoke(Method.java:511) 
12-09 15:27:18.160: E/WindowManager(2277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
12-09 15:27:18.160: E/WindowManager(2277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
12-09 15:27:18.160: E/WindowManager(2277): at dalvik.system.NativeStart.main(Native Method) 
12-09 15:27:18.330: E/MediaPlayer(2277): Uri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:18.330: D/MediaPlayer(2277): Couldn't open file on client side, trying server side 
12-09 15:27:18.440: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:18.460: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:49.230: E/MediaPlayer(2277): Uri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:49.230: D/MediaPlayer(2277): Couldn't open file on client side, trying server side 
12-09 15:27:49.420: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:49.430: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:49.680: E/MediaPlayer(2277): Uri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:49.680: D/MediaPlayer(2277): Couldn't open file on client side, trying server side 
12-09 15:27:49.780: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:49.790: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 
12-09 15:27:52.410: D/MediaPlayer(2277): start() mUri is http://192.168.105.34/hls/ilook.m3u8 

错误:

12-09 16:43:08.330: E/AndroidRuntime(6352): FATAL EXCEPTION: main 
12-09 16:43:08.330: E/AndroidRuntime(6352): java.lang.RuntimeException: Unable to start activity ComponentInfo{myapp/myapp.PlayerActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2080) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ActivityThread.access$600(ActivityThread.java:136) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.os.Looper.loop(Looper.java:137) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ActivityThread.main(ActivityThread.java:4803) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at dalvik.system.NativeStart.main(Native Method) 
12-09 16:43:08.330: E/AndroidRuntime(6352): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.view.ViewRootImpl.setView(ViewRootImpl.java:657) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.Dialog.show(Dialog.java:316) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ProgressDialog.show(ProgressDialog.java:130) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ProgressDialog.show(ProgressDialog.java:113) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at myapp.PlayerActivity.onCreate(PlayerActivity.java:44) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.Activity.performCreate(Activity.java:5084) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2044) 
12-09 16:43:08.330: E/AndroidRuntime(6352):  ... 11 more 
+0

你在logcat上收到任何错误/消息吗? –

+0

你能弄清楚你的活动的第44行吗? –

+0

第44行是pDialog = ProgressDialog.show(PlayerActivity.this,“”,getString(R.string.please_wait_while_loading),true); – Ksice

回答

1

试试这个:

 public static void getVideoFromServer(String urlPath) { 

    mProgressDialog.show(); 
    // Check whether internet/wifi connection available or not 
    // if false show alert dialog 
    if (!ConnectionChecker.selfLearnig(mContext)) { 
     mProgressDialog.dismiss(); 
     showNoInternetAlert(); 

     return; 
    } else { 

     try { 
      // Start the MediaController 
      MediaController mediacontroller = new MediaController(mContext); 
      mediacontroller.setAnchorView(mVideoview); 
      // Get the URL from String VideoURL 
      mVideo = Uri.parse(urlPath); 
      mVideoview.setMediaController(mediacontroller); 
      mVideoview.setVideoURI(mVideo); 

     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 

     } 

     mVideoview.requestFocus(); 
     mVideoview.setOnPreparedListener(new OnPreparedListener() { 
      // Close the progress bar and play the video 
      public void onPrepared(MediaPlayer mp) { 
       mProgressDialog.dismiss(); 
       mVideoview.start(); 

      } 
     }); 

     mVideoview.setOnCompletionListener(new OnCompletionListener() { 
      // Called when video is completed 
      public void onCompletion(MediaPlayer mp) { 

      } 
     }); 
    } 
} 

希望这有助于。

+0

所以这个想法是要知道错误。大!我更新了我的帖子。你能看看吗? – Ksice

+0

看看这个解决方案:http://stackoverflow.com/a/18330690/2652124 –