0

プログレスバーをサービスから閉じようとしていますが、強制終了エラーが表示されます。startservice onclick ボタンのメイン アクティビティにプログレスバーを作成しましたが、mediaplyer のリスナーを準備するときにそれを閉じたいと思います。サービスにUI関数を書くことはできないので、アクティビティに書きます。Main_acitivty object も試しました。pregressbar.dismiss(); しかし、強制終了エラーが表示されます。この問題の良い解決策。

編集:-プログレスバーを取得しましたが、準備が完了し、メディアプレーヤーが起動しようとしているときに、この行のために強制終了エラーが発生すると思います「vm.progressDialog.dismiss();」遊ぶ();

回答:-アクティビティをサービスにインポートし、アクティビティでプログレスバーを静的なものにすると正常に動作します。

ここに私のサービスがあり、メディアプレーヤーが初期化されています

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onCreate() {


 mp = new MediaPlayer();
    try {
        showNoti();
        final Main vm = new Main();


        mp.setDataSource(link);
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.prepareAsync();

        mp.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer mp) {
                // TODO Auto-generated method stub
                vm.progressDialog.dismiss();
                mp.start();
                b=true;
            }
        });

    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

エラー

09-17 18:12:01.330: E/AndroidRuntime(6708): FATAL EXCEPTION: main
09-17 18:12:01.330: E/AndroidRuntime(6708): java.lang.NullPointerException
09-17 18:12:01.330: E/AndroidRuntime(6708): at com.android.twitter.myPlayService$1.onPrepared(myPlayService.java:53)
09-17 18:12:01.330: E/AndroidRuntime(6708): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1973)
09-17 18:12:01.330: E/AndroidRuntime(6708): at android.os.Handler.dispatchMessage(Handler.java:99)
09-17 18:12:01.330: E/AndroidRuntime(6708): at android.os.Looper.loop(Looper.java:137)
4

1 に答える 1

0

より良い解決策は、進行状況バーをアクティビティ内にのみ配置し、進行状況バーを閉じる aを登録するBroadcastReceiverことです。

内部サービス:

  mp.setOnPreparedListener(new OnPreparedListener() {

        public void onPrepared(MediaPlayer mp) {
            // TODO Auto-generated method stub
            Intent intent = new Intent();
         intent.setAction("dismiss_progress_dialog");
       sendBroadcast(intent);

            mp.start();
            b=true;
        }
    });

内部活動

 class MyBroadcast extends BroadcastReceiver {
            @Override
            public void onReceive(Context ctxt, Intent i) {


                progressDialog.dismiss();

            }
        };

  MyBroadcast receiver;

onResume アクティビティの内部:

    receiver=new MyBroadcast();
    IntentFilter filter = new IntentFilter();
    filter.addAction("dismiss_progress_dialog");

    registerReceiver(receiver, filter);

onPause の内部:

   unregisterReceiver(receiver);
于 2014-07-15T11:27:14.180 に答える