ynduanlian 2015-02-07 05:49 采纳率: 0%
浏览 1459

一个播放铃音的Helloworld,手机上一运行就崩溃,请帮看看问题在哪?

几乎是照抄网上文章的代码,想实际点击button1播放手机铃音,点button2停止,结果在在手机上测试,一点击,APP就崩溃关闭了,请问是哪里不对?

import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
MyThread m;

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

    Button b1=(Button)findViewById(R.id.button1);
    Button b2=(Button)findViewById(R.id.button2);
    m=new MyThread(this);

    b1.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
        m.start();
        }
    });

    b2.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
        if (m.isAlive())
        m.StopAlarmRing();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;

}

class MyThread extends Thread{
    MediaPlayer mMediaPlayer;
    Context mContext;

    public MyThread(Context context){
    mMediaPlayer=new MediaPlayer();
    this.mContext=context;
    }

    @Override
    public void run(){
    Uri alert=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);

    try{
    mMediaPlayer.setDataSource(mContext,alert);
    final AudioManager audioManager=(AudioManager) getSystemService(Context.ACCOUNT_SERVICE);
    if (audioManager.getStreamVolume(AudioManager.STREAM_RING)!=0){
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
    mMediaPlayer.setLooping(true);
    try{
    mMediaPlayer.prepare();
    }catch(IllegalStateException e){
            e.printStackTrace();
            }
    }
    }catch(IOException e){
    e.printStackTrace();
    }
    mMediaPlayer.start();
    }

    private void StopAlarmRing(){
    mMediaPlayer.stop();
    }
}

}

  • 写回答

1条回答 默认 最新

  • ma477821209 2015-02-10 16:44
    关注

    try{
    mMediaPlayer.prepare();
    }catch(IllegalStateException e){
    e.printStackTrace();
    }
    }
    注掉试试

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵