Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从通知导航到活动时丢失活动的状态_Java_Android_Android Notifications - Fatal编程技术网

Java 从通知导航到活动时丢失活动的状态

Java 从通知导航到活动时丢失活动的状态,java,android,android-notifications,Java,Android,Android Notifications,我有一个名为Player activity的活动,在这个活动中,我在MediaPlayer API的帮助下播放音乐。每当创建“我的活动”时,都会显示一条通知,该通知对音乐播放器有一些基本的控制 因此,当我点击我的通知时,它会跳回玩家活动,但活动的状态会丢失 在点击通知之前: 点击通知后: 以下是我的通知的待定意图代码 Intent notifyIntent = new Intent(context, PlayerActivity.class); notifyIntent.setFl

我有一个名为Player activity的活动,在这个活动中,我在MediaPlayer API的帮助下播放音乐。每当创建“我的活动”时,都会显示一条通知,该通知对音乐播放器有一些基本的控制

因此,当我点击我的通知时,它会跳回玩家活动,但活动的状态会丢失

在点击通知之前:

点击通知后:

以下是我的通知的待定意图代码

Intent notifyIntent = new Intent(context, PlayerActivity.class);
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    notifyIntent.setAction("android.intent.action.MAIN");
    notifyIntent.addCategory("android.intent.category.LAUNCHER");
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
以下是PlayerActivity.java的代码:

    package com.example.user.musicplayer;

import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

import java.util.concurrent.TimeUnit;

import de.hdodenhof.circleimageview.CircleImageView;

public class PlayerActivity extends AppCompatActivity implements MediaPlayer.OnBufferingUpdateListener,MediaPlayer.OnCompletionListener{

    private static Button btn_play_pause;
    private  Button btnToggleRepeat;
    private  Button btnStop;
    private SeekBar seekBar;
    private TextView textView;


    public static MediaPlayer mediaPlayer;
    private int mediaFileLength;
    private int realtimeLength;
    private String musicUrl;
    private String imageUrl;
    final Handler handler = new Handler();
    private boolean isRepeat;
    private CircleImageView musicImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);
        Log.d("TAG", "onCreate");
        NotificationGenerator.customBigNotification(getApplicationContext());

        musicUrl = getIntent().getStringExtra("musicUrl");
        imageUrl = getIntent().getStringExtra("imageUrl");
        seekBar = (SeekBar)findViewById(R.id.seekbar);
        seekBar.setMax(99); // 100% (0~99)
        seekBar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(mediaPlayer.isPlaying())
                {
                    SeekBar seekBar = (SeekBar)v;
                    int playPosition = (mediaFileLength/100)*seekBar.getProgress();
                     mediaPlayer.seekTo(playPosition);
                }
                return false;
            }
        });

        textView = (TextView)findViewById(R.id.txtTime);
        btnToggleRepeat = findViewById(R.id.btnRepeat);
        btnStop = findViewById(R.id.btnStop);
        musicImage = findViewById(R.id.musicImgView);

        Picasso.get().load(imageUrl).placeholder(R.drawable.music).error(R.drawable.music).into(musicImage);

        btn_play_pause = (Button) findViewById(R.id.btnTogglePlay);
        btn_play_pause.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                final ProgressDialog mDialog = new ProgressDialog(PlayerActivity.this);


                AsyncTask<String,String,String> mp3Play = new AsyncTask<String, String, String>() {

                    @Override
                    protected void onPreExecute() {
                        mDialog.setMessage("Please wait");
                        mDialog.show();
                    }

                    @Override
                    protected String doInBackground(String... params) {
                        try{
                            mediaPlayer.setDataSource(params[0]);
                            mediaPlayer.prepare();
                        }
                        catch (Exception ex)
                        {
                        }
                        return "";
                    }

                    @Override
                    protected void onPostExecute(String s) {
                        mediaFileLength = mediaPlayer.getDuration();
                        realtimeLength = mediaFileLength;
                        if(!mediaPlayer.isPlaying())
                        {
                            playMusic();
                        }
                        else
                        {
                            pauseMusic();
                        }

                        updateSeekBar();
                        mDialog.dismiss();
                    }
                };


                mp3Play.execute(musicUrl); // direct link mp3 file

            }
        });



        btnToggleRepeat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isRepeat){
                    isRepeat = false;
                    mediaPlayer.setLooping(false);
                    btnToggleRepeat.setText("Repeat");
                }
                else{
                    isRepeat = true;
                    mediaPlayer.setLooping(true);
                    btnToggleRepeat.setText("Single");

                }
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    mediaPlayer.pause();
                    mediaPlayer.stop();

                }
                catch (Exception e){
                    Toast.makeText(PlayerActivity.this, "Opps! sorry something bad happened", Toast.LENGTH_SHORT).show();
                }

            }
        });


        mediaPlayer = new MediaPlayer();
        mediaPlayer.setOnBufferingUpdateListener(this);
        mediaPlayer.setOnCompletionListener(this);


    }

    public void pauseMusic() {
        mediaPlayer.pause();
        btn_play_pause.setText("Play");
    }

    public  void playMusic() {
        mediaPlayer.start();
        btn_play_pause.setText("Pause");
    }


    private void updateSeekBar() {
        seekBar.setProgress((int)(((float)mediaPlayer.getCurrentPosition() / mediaFileLength)*100));
        if(mediaPlayer.isPlaying())
        {
            Runnable updater = new Runnable() {
                @Override
                public void run() {
                    updateSeekBar();
                    realtimeLength-=1000; // declare 1 second
                    textView.setText(String.format("%d:%d",TimeUnit.MILLISECONDS.toMinutes(realtimeLength),
                            TimeUnit.MILLISECONDS.toSeconds(realtimeLength) -
                                    TimeUnit.MILLISECONDS.toSeconds(TimeUnit.MILLISECONDS.toMinutes(realtimeLength))));

                }

            };
            handler.postDelayed(updater,1000); // 1 second
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("TAG", "onResume");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG", "onStart");
    }

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        seekBar.setSecondaryProgress(percent);
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        if(!mediaPlayer.isLooping())
            btn_play_pause.setText("Play");

    }

    @Override
    protected void onStop() {
        super.onStop();

    }


    @Override
    protected void onPause() {
        super.onPause();
    }

    public static class DownloadCancelReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            Log.d("notificationPlayer","Received Cancelled Event");
        }
    }
}
package com.example.user.musicplayer;
导入android.app.ProgressDialog;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.media.MediaMetadataRetriever;
导入android.media.MediaPlayer;
导入android.os.AsyncTask;
导入android.os.Handler;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageButton;
导入android.widget.SeekBar;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.squareup.picasso.picasso;
导入java.util.concurrent.TimeUnit;
导入de.hdodenhof.circleimageview.circleimageview;
公共类PlayerActivity扩展AppCompativeActivity实现MediaPlayer.OnBufferingUpdateListener、MediaPlayer.OnCompletionListener{
私人静态按钮btn\u播放\u暂停;
私人按钮btnToggleRepeat;
私人按钮btnStop;
私人SeekBar SeekBar;
私有文本视图文本视图;
公共静态媒体播放器;
私有int mediaFileLength;
私有整数实时长度;
私人弦乐曲;
私有字符串imageUrl;
最终处理程序=新处理程序();
私有布尔isRepeat;
私人音乐圈;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u播放器);
Log.d(“TAG”、“onCreate”);
NotificationGenerator.customBigNotification(getApplicationContext());
musicUrl=getIntent().getStringExtra(“musicUrl”);
imageUrl=getIntent().getStringExtra(“imageUrl”);
seekBar=(seekBar)findViewById(R.id.seekBar);
seekBar.setMax(99);//100%(0~99)
seekBar.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
if(mediaPlayer.isPlaying())
{
SeekBar SeekBar=(SeekBar)v;
int playPosition=(mediaFileLength/100)*seekBar.getProgress();
mediaPlayer.seekTo(播放位置);
}
返回false;
}
});
textView=(textView)findViewById(R.id.txtTime);
btnToggleRepeat=findviewbyd(R.id.btnRepeat);
btnStop=findviewbyd(R.id.btnStop);
musicImage=findviewbyd(R.id.musicImgView);
Picasso.get().load(imageUrl).placeholder(R.drawable.music).error(R.drawable.music).into(musicImage);
btn_play_pause=(按钮)findViewById(R.id.btnTogglePlay);
btn_play_pause.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
final ProgressDialog mDialog=新建ProgressDialog(PlayerActivity.this);
AsyncTask mp3Play=新建AsyncTask(){
@凌驾
受保护的void onPreExecute(){
mDialog.setMessage(“请稍候”);
mDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
mediaPlayer.setDataSource(参数[0]);
mediaPlayer.prepare();
}
捕获(例外情况除外)
{
}
返回“”;
}
@凌驾
受保护的void onPostExecute(字符串s){
mediaFileLength=mediaPlayer.getDuration();
realtimeLength=mediaFileLength;
如果(!mediaPlayer.isPlaying())
{
播放音乐();
}
其他的
{
pauseMusic();
}
updateSeekBar();
mDialog.discouse();
}
};
mp3Play.execute(musicUrl);//直接链接mp3文件
}
});
btnToggleRepeat.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(isRepeat){
isRepeat=false;
mediaPlayer.setLooping(false);
btnToggleRepeat.setText(“重复”);
}
否则{
isRepeat=true;
mediaPlayer.setLooping(true);
btnToggleRepeat.setText(“单一”);
}
}
});
btnStop.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
mediaPlayer.pause();
mediaPlayer.stop();
}
捕获(例外e){
Toast.makeText(PlayerActivity.this,“Opps!抱歉发生了不好的事情”,Toast.LENGTH\u SHORT.show();
}
}
});
mediaPlayer=新媒体播放器
android:launchMode="singleTask"
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);