Форум программистов, компьютерный форум CyberForum.ru

IllegalStateException media player - Android

Войти
Регистрация
Восстановить пароль
 
okunetsky
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 28
17.09.2016, 01:14     IllegalStateException media player #1
Делаю проигрователь. Запускаю, выбираю песню. Играет,все ок. Но потом нажимаю назад и выхожу из программы. Запускаю опять...И при выборе песни -- исключение



Вот классы и лейауты

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
public class MusicService extends Service implements
        MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,
        MediaPlayer.OnCompletionListener {
long currentLength=0;
 
    long totalLength=100;
    //media player
    private MediaPlayer player;
    //song list
    private ArrayList<Song> songs;
    //current position
    private int songPosn;
    //binder
    private final IBinder musicBind = new MusicBinder();
    //title of current song
    public String songTitle="";
    //notification id
    private static final int NOTIFY_ID=1;
    //shuffle flag and random
    private boolean shuffle=false;
    private Random rand;
    Handler handler=new Handler();
 
 
 
    public void onCreate(){
        //create the service
        super.onCreate();
        //initialize position
        songPosn=0;
        //random
        rand=new Random();
        //create player
        player = new MediaPlayer();
        //initialize
        initMusicPlayer();
    }
 
    public void initMusicPlayer(){
        //set player properties
        player.setWakeMode(getApplicationContext(),
                PowerManager.PARTIAL_WAKE_LOCK);
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        //set listeners
        player.setOnPreparedListener(this);
        player.setOnCompletionListener(this);
        player.setOnErrorListener(this);
 
    }
 
    //pass song list
    public void setList(ArrayList<Song> theSongs){
        songs=theSongs;
    }
 
    //binder
    public class MusicBinder extends Binder {
        MusicService getService() {
            return MusicService.this;
        }
    }
 
    //activity will bind to service
    @Override
    public IBinder onBind(Intent intent) {
        return musicBind;
    }
 
    //release resources when unbind
    @Override
    public boolean onUnbind(Intent intent){
        player.stop();
        player.release();
        return false;
    }
 
 
    public void stopPlaying()
    {
        player.stop();
    }
    //play a song
    public void playSong(){
        //play
        player.reset();
        //get song
        Song playSong = songs.get(songPosn);
        //get title
        songTitle=playSong.getTitle();
        //get id
        long currSong = playSong.getId();
        //set uri
        Uri trackUri = ContentUris.withAppendedId(
                android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                currSong);
        //set the data source
        try{
            player.setDataSource(getApplicationContext(), trackUri);
        }
        catch(Exception e){
            Log.e("MUSIC SERVICE", "Error setting data source", e);
        }
        player.prepareAsync();
    }
 
    //set the song
    public void setSong(int songIndex){
        songPosn=songIndex;
    }
 
    @Override
    public void onCompletion(MediaPlayer mp) {
        //check if playback has reached the end of a track
        if(player.getCurrentPosition()>0){
            mp.reset();
            playNext();
        }
    }
 
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.v("MUSIC PLAYER", "Playback Error");
        mp.reset();
        return false;
    }
 
    public long getCurrentLength() {
        return player.getCurrentPosition();
    }
 
    public long getTotalLength() {
        return totalLength;
    }
 
    @Override
    public void onPrepared(MediaPlayer mp) {
        //start playback
 
 
        mp.start();
 
        totalLength=mp.getDuration();
        Log.d("olek","ttl l ios"+totalLength);
        //notification
//        Intent notIntent = new Intent(this, MainActivity.class);
//        notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//        PendingIntent pendInt = PendingIntent.getActivity(this, 0,
//                notIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//
//        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
//
//        builder.setContentIntent(pendInt)
//                .setSmallIcon(R.drawable.play)
//                .setTicker(songTitle)
//                .setOngoing(true)
//                .setContentTitle("Playing")
//                .setContentText(songTitle);
//        Notification not = builder.build();
//        startForeground(NOTIFY_ID, not);
    }
 
    //playback methods
    public int getPosn(){
        return player.getCurrentPosition();
    }
 
    public int getDur(){
        return player.getDuration();
    }
 
    public boolean isPng(){
        return player.isPlaying();
    }
 
    public void pausePlayer(){
 
        player.pause();
    }
 
    public void seek(int posn){
        player.seekTo(posn);
    }
 
    public void go(){
        player.start();
    }
 
    //skip to previous track
    public void playPrev(){
        songPosn--;
        if(songPosn<0) songPosn=songs.size()-1;
        playSong();
    }
 
 
 
    //skip to next
    public void playNext(){
        if(shuffle){
            int newSong = songPosn;
            while(newSong==songPosn){
                newSong=rand.nextInt(songs.size());
            }
            songPosn=newSong;
        }
        else{
            songPosn++;
            if(songPosn>=songs.size()) songPosn=0;
        }
        playSong();
    }
 
    @Override
    public void onDestroy() {
        stopForeground(true);
       // player.reset();
        player.release();
    }
 
    //toggle shuffle
    public void setShuffle(){
        if(shuffle) shuffle=false;
        else shuffle=true;
 
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    public void setMusicSrv(MusicService musicSrv) {
        this.musicSrv = musicSrv;
    }
 
    MusicService musicSrv;
    private ArrayList<Song> mDataset;
 
    // класс view holder-а с помощью которого мы получаем ссылку на каждый элемент
    // отдельного пункта списка
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // наш пункт состоит только из одного TextView
        public TextView mTextView;
        View view1;
 
        public ViewHolder(View v) {
            super(v);
            view1=v;
            mTextView = (TextView) v.findViewById(R.id.tv_recycler_item);
        }
    }
 
    // Конструктор
    public RecyclerAdapter(ArrayList<Song> dataset,MusicService musicSrv) {
        mDataset = dataset;
        this.musicSrv=musicSrv;
    }
 
    // Создает новые views (вызывается layout manager-ом)
    @Override
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                         int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recycler_item, parent, false);
 
 
        // тут можно программно менять атрибуты лэйаута (size, margins, paddings и др.)
 
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }
 
    // Заменяет контент отдельного view (вызывается layout manager-ом)
    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
 
        holder.mTextView.setText(mDataset.get(position).getTitle());
        Log.e("olek","id is "+ String.valueOf(position));
        //holder.itemView.setTag(position);
        holder.view1.setTag(position);
 
 
 
 
    }
 
    // Возвращает размер данных (вызывается layout manager-ом)
    @Override
    public int getItemCount() {
        Log.d("olek", String.valueOf(mDataset.size()));
        return mDataset.size();
 
    }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
public class ScrollingActivity2 extends AppCompatActivity {
    private long totalLength=0;
    private MusicService musicSrv;
    private Intent playIntent;
    private boolean musicBound=false;
    private ArrayList<Song> songList;
 
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
 
    SeekBar musicSeekBar;
 
    Handler handler=new Handler();
    ImageButton btnPlay;
 
 
 
    private ServiceConnection musicConnection = new ServiceConnection(){
 
 
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            MusicService.MusicBinder binder = (MusicService.MusicBinder)service;
            //get service
            musicSrv = binder.getService();
            //pass list
            musicSrv.setList(songList);
            musicBound = true;
        }
 
        @Override
        public void onServiceDisconnected(ComponentName name) {
            musicBound = false;
        }
    };
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scrolling2);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        songList=new ArrayList<>();
        btnPlay= (ImageButton) findViewById(R.id.imgBtnPlay);
 
        musicSeekBar= (SeekBar) findViewById(R.id.seekBar);
 
//        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
//        fab.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
//                        .setAction("Action", null).show();
//            }
//        });
 
        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                musicSrv.go();
            }
        });
 
        songList=new ArrayList<>();
        getSongList();
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
 
        // если мы уверены, что изменения в контенте не изменят размер layout-а RecyclerView
        // передаем параметр true - это увеличивает производительность
        mRecyclerView.setHasFixedSize(true);
 
        // используем linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        // создаем адаптер
        mAdapter = new RecyclerAdapter(songList,musicSrv);
        mRecyclerView.setAdapter(mAdapter);
 
 
    }
 
    public void getSongList() {
        //retrieve song info
 
        ContentResolver musicResolver = getContentResolver();
        Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
 
        if(musicCursor!=null && musicCursor.moveToFirst()){
            //get columns
            int titleColumn = musicCursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media.TITLE);
            int idColumn = musicCursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media._ID);
            int artistColumn = musicCursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media.ARTIST);
            //add songs to list
            do {
                long thisId = musicCursor.getLong(idColumn);
                String thisTitle = musicCursor.getString(titleColumn);
                String thisArtist = musicCursor.getString(artistColumn);
                songList.add(new Song(thisId, thisTitle, thisArtist));
            }
            while (musicCursor.moveToNext());
        }
        assert musicCursor != null;
        musicCursor.close();
    }
 
    public void songPicked(View view){
        musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
        Log.d("olek", String.valueOf(view.getTag()));
        musicSrv.playSong();
         long totalLength=musicSrv.getTotalLength();
 
        musicSeekBar.setMax((int) totalLength);
 
        Log.d("olek","max in tr is"+musicSeekBar.getMax());
 
        //handler.post(runnable);
    }
 
    @Override
    protected void onDestroy() {
        unbindService(musicConnection);
        //stopService(playIntent);
        musicSrv=null;
        super.onDestroy();
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        if(playIntent==null){
            playIntent = new Intent(this, MusicService.class);
            bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE);
            startService(playIntent);
 
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2016, 01:14     IllegalStateException media player
Посмотрите здесь:

Windows Media Player 11 Софт
Media player на visual C++ Visual C++
Media player на VС++ Visual C++
Windows Media Player Windows XP
Android bluestacks app player
C++ Builder Media Player
Повторное воспроизведение музыки после кнопки home (media-player) Android
Flash Player Android
Android Завершення работи Media Player
Android YouTube Android Player API
Android Media player долго грузится поток
Сдвинуть аппаратные кнопки в Blue Stacks App Player Basic4Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
okunetsky
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 28
17.09.2016, 01:15  [ТС]     IllegalStateException media player #2
А вот и само исключение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
09-17 01:05:14.899 28109-28109/com.example.oleg.music3 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         java.lang.IllegalStateException: Could not execute method of the activity
                                                                             at android.view.View$1.onClick(View.java:2144)
                                                                             at android.view.View.performClick(View.java:2485)
                                                                             at android.view.View$PerformClick.run(View.java:9080)
                                                                             at android.os.Handler.handleCallback(Handler.java:587)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                             at android.os.Looper.loop(Looper.java:123)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:3687)
                                                                             at java.lang.reflect.Method.invokeNative(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:507)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
                                                                             at dalvik.system.NativeStart.main(Native Method)
                                                                          Caused by: java.lang.reflect.InvocationTargetException
                                                                             at java.lang.reflect.Method.invokeNative(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:507)
                                                                             at android.view.View$1.onClick(View.java:2139)
                                                                             at android.view.View.performClick(View.java:2485) 
                                                                             at android.view.View$PerformClick.run(View.java:9080) 
                                                                             at android.os.Handler.handleCallback(Handler.java:587) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:92) 
                                                                             at android.os.Looper.loop(Looper.java:123) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:3687) 
                                                                             at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                             at java.lang.reflect.Method.invoke(Method.java:507) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
                                                                             at dalvik.system.NativeStart.main(Native Method) 
                                                                          Caused by: java.lang.IllegalStateException
                                                                             at android.media.MediaPlayer._reset(Native Method)
                                                                             at android.media.MediaPlayer.reset(MediaPlayer.java:1213)
                                                                             at com.example.oleg.music3.MusicService.playSong(MusicService.java:102)
                                                                             at com.example.oleg.music3.ScrollingActivity2.songPicked(ScrollingActivity2.java:141)
                                                                             at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                             at java.lang.reflect.Method.invoke(Method.java:507) 
                                                                             at android.view.View$1.onClick(View.java:2139) 
                                                                             at android.view.View.performClick(View.java:2485) 
                                                                             at android.view.View$PerformClick.run(View.java:9080) 
                                                                             at android.os.Handler.handleCallback(Handler.java:587) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:92) 
                                                                             at android.os.Looper.loop(Looper.java:123) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:3687) 
                                                                             at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                             at java.lang.reflect.Method.invoke(Method.java:507) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
                                                                             at dalvik.system.NativeStart.main(Native Method) 
                                                                         
                                                                         
                                                                         [ 09-17 01:05:14.909   160:0xb5 E/         ]
                                                                         Dumpstate > /data/log/dumpstate_app_error
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
17.09.2016, 21:37     IllegalStateException media player #3
okunetsky, поставь точку останова и посмотри 115 строку в сервисе, скорее всего ты вызываешь reset после release
Yandex
Объявления
17.09.2016, 21:37     IllegalStateException media player
Ответ Создать тему
Опции темы

Текущее время: 12:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru