0

在我的应用程序中,我将从 URL 播放音乐。所以播放音频仍然需要一些时间,因为它是通过流媒体播放的。我想在等待MediaPlayer播放/开始时实现 ProgressDialog。

这是我播放音频的方法: public void playMedia(String songIndex) {

            ProgressDialog pDialog;
            pDialog = new ProgressDialog(context);
            pDialog.setMessage("Loading. . . ");
            pDialog.setCancelable(false);
            pDialog.show();

            Uri songUri = Uri.parse(songIndex);
                    try {
                        mp.setDataSource(context, songUri);
                        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        mp.prepare();

                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }finally{
                        pDialog.dismiss();
                    }

                    if(mp!=null)
                        mp.start();
        }

这就是我尝试实现它的方式。但它没有用。我有这样的例外:

        08-27 19:48:13.896: E/InputEventReceiver(8798): Exception dispatching input event.
        08-27 19:48:13.896: E/MessageQueue-JNI(8798): Exception in MessageQueue callback: handleReceiveCallback
        08-27 19:48:13.906: E/MessageQueue-JNI(8798): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewRootImpl.setView(ViewRootImpl.java:599)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.app.Dialog.show(Dialog.java:285)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at com.app.adapters.MyRowAdapter.playMedia(MyRowAdapter.java:126)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at com.app.adapters.MyRowAdapter$2$4.onTouch(MyRowAdapter.java:522)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.View.dispatchTouchEvent(View.java:7185)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2280)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2023)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2280)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2023)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2280)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2023)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2280)
        08-27 19:48:13.906: E/MessageQueue-JNI(8798):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2023)

还有其他方法可以实现吗?比如我应该把这个放在哪里?提前致谢。

4

2 回答 2

0

如果您引用了 getApplicationContext() ,您在此处使用的上下文对象 pDialog = new ProgressDialog(context);将不起作用。

而是尝试用这样的活动上下文替换它,

 pDialog = new ProgressDialog(ActivityName.this);
于 2013-08-27T11:53:57.227 回答
0
    Use Async Task:

     private class MediaPlayer extends AsyncTask<String, Void, String> {

            @Override
            protected String doInBackground(String... params) {
                     Uri songUri = Uri.parse(songIndex);
                        try {
                            mp.setDataSource(context, songUri);
                            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                            mp.prepare();

                        } catch (IllegalArgumentException e) {
                            e.printStackTrace();
                        } catch (IllegalStateException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
return mp;
            }        

            @Override
            protected void onPostExecute(String result) {             
            }

            @Override
            protected void onPreExecute() {
    ProgressDialog pDialog;
                pDialog = new ProgressDialog(context);
                pDialog.setMessage("Uploading file. . . ");
                pDialog.setCancelable(false);
                pDialog.show();
            }

            @Override
            protected void onProgressUpdate(Void... values) {
            }
        }
于 2013-08-27T12:09:33.803 回答