Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 - Fatal编程技术网

Java 如何在来电时停止播放音乐?

Java 如何在来电时停止播放音乐?,java,android,Java,Android,我一直在尝试让我的应用程序在手机铃声响起时停止播放音乐,但它无法工作。我什么都试过了,但似乎不可能。这是密码 package com.beanie.samples.streaming; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import ja

我一直在尝试让我的应用程序在手机铃声响起时停止播放音乐,但它无法工作。我什么都试过了,但似乎不可能。这是密码

package com.beanie.samples.streaming;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import com.beanie.samples.streaming.R;
import com.beanie.samples.streaming.MyService;

import android.app.Activity;
import android.app.IntentService;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

public class HomeActivity extends Activity implements OnClickListener {

    private static final String TAG = "MyServices";

    private final static String RADIO_STATION_URL = "http://195.154.237.162:8936/";

    private static final String START_STICKY = null;
    Button buttonPlay, buttonStopPlay;

    /** Called when the activity is first created.
     * Keep this here all the application will stop working */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initializeUIElements();

        initializeMediaPlayer();

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        buttonPlay = (Button) findViewById(R.id.buttonPlay);
        buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay);

        buttonPlay.setOnClickListener(this);
        buttonStopPlay.setOnClickListener(this);
    }

    private ProgressBar playSeekBar;

    private MediaPlayer player;

    private InputStream recordingStream;

    private RecorderThread recorderThread;

    private boolean isRecording = false;

    private void initializeUIElements() {

        playSeekBar = (ProgressBar) findViewById(R.id.progressBar1);
        playSeekBar.setMax(100);
        playSeekBar.setVisibility(View.INVISIBLE);

        buttonPlay = (Button) findViewById(R.id.buttonPlay);
        buttonPlay.setOnClickListener(this);

        buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay);
        buttonStopPlay.setEnabled(false);
        buttonStopPlay.setOnClickListener(this);
    }

    public void startPlaying() {
        buttonStopPlay.setEnabled(true);
        buttonPlay.setEnabled(false);

        playSeekBar.setVisibility(View.VISIBLE);

        player.prepareAsync();

        player.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer mp) {
                player.start();
            }
        });
    }

    private void onBufferingUpdate(MediaPlayer mp, int percent) {
        playSeekBar.setSecondaryProgress(percent);
        Toast.makeText(this, "Buffering ", percent).show();

        Log.i("Buffering", "" + percent);
    }

    public class GetCallerInfoActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);     
            // register PhoneStateListener 
            PhoneStateListener callStateListener = new PhoneStateListener() {

                public void onCallStateChanged(int state, String incomingNumber) {

                    // If phone ringing
                    if (state==TelephonyManager.CALL_STATE_RINGING) {
                        stopPlaying();                                        
                    }

                    // If incoming call received
                    if (state==TelephonyManager.CALL_STATE_OFFHOOK) {
                        stopPlaying();
                    }


                    if (state==TelephonyManager.CALL_STATE_IDLE) {
                        Toast.makeText(getApplicationContext(),"phone is neither ringing nor in a call", Toast.LENGTH_LONG).show();
                    }
                }
            };

            telephonyManager.listen(callStateListener,PhoneStateListener.LISTEN_CALL_STATE);
        } 
    }

    public void onClick(View v) {
        if (v == buttonPlay) {
            startPlaying();
            player.setLooping(false); // Set looping
        } else if (v == buttonStopPlay) {

            Log.d(TAG, "onClick: stopping srvice");
            stopPlaying();
        }
    }

    private void stopPlaying() {
        if (player.isPlaying()) {
            player.stop();
            player.release();
            initializeMediaPlayer();
        }

        buttonPlay.setEnabled(true);
        buttonStopPlay.setEnabled(false);
        playSeekBar.setVisibility(View.INVISIBLE);

        stopRecording();
    }

    private void initializeMediaPlayer() {
        player = new MediaPlayer();
        try {
            player.setDataSource(RADIO_STATION_URL);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void startRecording() {

        BufferedOutputStream writer = null;
        try {
            URL url = new URL(RADIO_STATION_URL);
            URLConnection connection = url.openConnection();
            final String FOLDER_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()
                    + File.separator + "Songs";

            File folder = new File(FOLDER_PATH);
            if (!folder.exists()) {
                folder.mkdir();
            }

            writer = new BufferedOutputStream(new FileOutputStream(new File(FOLDER_PATH
                    + File.separator + "sample.mp3")));
            recordingStream = connection.getInputStream();

            final int BUFFER_SIZE = 100;

            byte[] buffer = new byte[BUFFER_SIZE];

            while (recordingStream.read(buffer, 0, BUFFER_SIZE) != -1 && isRecording) {
                writer.write(buffer, 0, BUFFER_SIZE);
                writer.flush();
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                recordingStream.close();
                writer.flush();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private void stopRecording() {

        try {
            isRecording = false;
            if (recordingStream != null) {
                recordingStream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private class RecorderThread extends Thread {
        @Override
        public void run() {
            isRecording = true;
            startRecording();
        }

    };
}
有人能帮忙实施吗?我会很感激的,这会很有帮助的。而且,我甚至通过尝试来帮助自己

您需要使用

侦听器对象可以这样创建

private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        // Test for incoming call, dialing call, active or on hold
        if (state==TelephonyManager.CALL_STATE_RINGING || state==TelephonyManager.CALL_STATE_OFFHOOK)
        {
            stop();  // Put here the code to stop your music
        }
        super.onCallStateChanged(state, incomingNumber);
    }
};
停止或关闭应用程序时,请记住拨打此电话

mTelephonyMgr.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
你需要使用

侦听器对象可以这样创建

private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        // Test for incoming call, dialing call, active or on hold
        if (state==TelephonyManager.CALL_STATE_RINGING || state==TelephonyManager.CALL_STATE_OFFHOOK)
        {
            stop();  // Put here the code to stop your music
        }
        super.onCallStateChanged(state, incomingNumber);
    }
};
停止或关闭应用程序时,请记住拨打此电话

mTelephonyMgr.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);

好的,谢谢;我设法让它工作了!忘了在onClick中调用它,准备在OnCreate中添加它instead@user279297不客气。如果您对答案进行投票或将答案标记为已接受,我将不胜感激。我无法投票,因为我没有足够的声誉,但我已接受@Merlevede thank's它正在为我的mediaplayer应用程序工作。此解决方案比收听广播事件具有优势。前者不需要任何权限,而后者需要android.permission.READ\u PHONE\u状态,这可能对用户很重要。好的,谢谢;我设法让它工作了!忘了在onClick中调用它,准备在OnCreate中添加它instead@user279297不客气。如果您对答案进行投票或将答案标记为已接受,我将不胜感激。我无法投票,因为我没有足够的声誉,但我已接受@Merlevede thank's它正在为我的mediaplayer应用程序工作。此解决方案比收听广播事件具有优势。前者不需要任何权限,而后者需要android.permission.READ\u PHONE\u状态,这可能对用户很重要。