Android开发 手机测试运行报错1

来源:互联网 发布:dblp数据集 编辑:程序博客网 时间:2024/05/29 16:51

写了一个手机音乐视频程序练习一下,但手机测试时显示错误,打不开



http://img.blog.csdn.net/20170808120906304?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc1Mjc5NDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center



下面展示一下这个程序,首先是mainActivity_xml的截图


http://img.blog.csdn.net/20170808121146202?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc1Mjc5NDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center



然后是mainActivity.java文件代码:



1    package com.example.aptx___4869.myapplication17; 2     3    import android.app.Activity; 4    import android.content.Intent; 5    import android.content.pm.ActivityInfo; 6    import android.database.Cursor; 7    import android.media.MediaPlayer; 8    import android.net.Uri; 9    import android.provider.MediaStore; 10   import android.support.v7.app.AppCompatActivity; 11   import android.os.Bundle; 12   import android.view.View; 13   import android.view.WindowManager; 14   import android.widget.Button; 15   import android.widget.CheckBox; 16   import android.widget.TextView; 17   import android.widget.Toast; 18    19   public class MainActivity extends AppCompatActivity implements 20           MediaPlayer.OnPreparedListener, 21           MediaPlayer.OnErrorListener, 22           MediaPlayer.OnCompletionListener{ 23    24       Uri uri; 25       TextView txvName,txvUri; 26       boolean isVideo=false;//用来记录是否为视频文件 27    28       Button btnPlay,btnStop;//用来引用播放停止按钮 29       CheckBox ckbLoop;//引用重复播放按钮 30       MediaPlayer mper;//引用MediaPlayer对象 31       Toast tos;//引用Toast对象 32       @Override 33       protected void onCreate(Bundle savedInstanceState) { 34           super.onCreate(savedInstanceState); 35           setContentView(R.layout.activity_main); 36    37           setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);//设置屏幕不随手机旋转 38           setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//设置屏幕直向显示 39           getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//设置屏幕不进入休眠 40    41           txvName=(TextView)findViewById(R.id.txvName); 42           txvUri=(TextView)findViewById(R.id.txvUri); 43    44    45           uri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.bayern);//默认播放程序内的音乐 46    47           txvName.setText("Bayern.mp3"); 48           txvUri.setText("程序内的音乐:"+uri.toString()); 49    50           mper=new MediaPlayer(); 51           mper.setOnPreparedListener(this); 52           mper.setOnErrorListener(this); 53           mper.setOnCompletionListener(this);//3个监听事件,当音乐准备好了,当音乐发生错误,当音乐播放完了 54           tos=Toast.makeText(this,"",Toast.LENGTH_SHORT); 55    56           prepareMusic();//准备播放默认音乐 57    58    59       } 60    61        void prepareMusic() { 62            btnPlay.setText("播放"); 63            btnPlay.setEnabled(false);//使播放按钮等准备好才能单击 64            btnStop.setEnabled(false);//使停止按钮不能按 65    66            try{ 67    68                mper.reset();//重新归零 69                mper.setDataSource(this,uri);//指定音乐来源 70                mper.setLooping(ckbLoop.isChecked());//设置是否重复播放 71                mper.prepareAsync();//要求MediaPlayer准备播放指定音乐 72            }catch (Exception e){//拦截错误信息并显示 73    74                tos.setText("指定音乐文件错误!"+e.toString()); 75                tos.show(); 76            } 77    78       } 79    80       public  void onPick(View v){ 81    82           Intent it=new Intent(Intent.ACTION_GET_CONTENT); 83    84           if(v.getId()==R.id.btnPickAudio){ 85    86               it.setType("audio/*"); 87               startActivityForResult(it,100); 88           } 89           else{ 90               it.setType("video/*"); 91               startActivityForResult(it,101); 92           } 93       } 94    95       protected void onActivityResult(int requestCode,int resultCode,Intent data){ 96           super.onActivityResult(requestCode,resultCode,data); 97    98           if(resultCode== Activity.RESULT_OK){ 99    100              isVideo=(requestCode==101);//记录是否选取了视频文件 101              uri= convertUri(data.getData());//获取选取文件的Uri,并进行格式转换 102   103              txvName.setText(uri.getLastPathSegment());//显示文件名 104              txvUri.setText("文件位置:"+uri.getPath());//显示文件路径 105              if(!isVideo) prepareMusic(); 106          } 107      } 108   109       Uri convertUri(Uri uri) { 110   111           if(uri.toString().substring(0,7).equals("content")){ 112   113               String[] colName={MediaStore.MediaColumns.DATA}; 114               Cursor cursor=getContentResolver().query(uri,colName,null,null,null); 115               cursor.moveToFirst(); 116               uri=Uri.parse("file://"+cursor.getString(0)); 117               cursor.close(); 118           } 119           return uri; 120      } 121   122      @Override 123      public void onPrepared(MediaPlayer mp) { 124   125          btnPlay.setEnabled(true); 126   127      } 128   129      @Override 130      public void onCompletion(MediaPlayer mp) { 131   132          mper.seekTo(0);//将播放位置归0 133          btnPlay.setText("播放"); 134          btnStop.setEnabled(false); 135   136      } 137   138      @Override 139      public boolean onError(MediaPlayer mp, int what, int extra) { 140   141          tos.setText("发生错误,停止播放!"); 142          tos.show(); 143   144          return true; 145      } 146   147      public void onMpPlay(View v){//按下播放按钮时执行这个函数 148          if(mper.isPlaying()){ 149              mper.pause();//如果正在播放就暂停 150              btnPlay.setText("继续"); 151          } 152          else{ 153              mper.start(); 154              btnPlay.setText("暂停"); 155              btnStop.setEnabled(true); 156          } 157   158          if(isVideo){//如果是视频 159              Intent it=new Intent(this,MediaStore.Video.class);//创建打开video Activity的Intent 160              it.putExtra("uri",uri.toString()); 161   162              startActivity(it);//启动video Activity 163              return; 164          } 165      } 166   167      public void onMpStop(View v){//按下停止按钮时执行这个函数 168          mper.pause(); 169          mper.seekTo(0); 170          btnPlay.setText("播放"); 171          btnStop.setEnabled(false); 172      } 173   174      public void onMpLoop(View v){ 175   176          if(ckbLoop.isChecked()) 177              mper.setLooping(true); 178          else 179              mper.setLooping(false); 180      } 181   182      public void onMpBackward(View v){ 183   184          if(!btnPlay.isEnabled()) 185              return;//如果还没有准备好,则不处理 186   187          int len=mper.getDuration(); 188          int pos=mper.getCurrentPosition(); 189          pos-=10000;//倒退10秒,10000毫秒 190          if(pos<0) pos=0; 191          mper.seekTo(pos); 192          tos.setText("倒退10秒"+pos/1000+"/"+len/1000); 193          tos.show(); 194      } 195   196      public void onMpForward(View v){ 197          if(!btnPlay.isEnabled()) 198              return;//如果还没有准备好,则不处理 199   200          int len=mper.getDuration(); 201          int pos=mper.getCurrentPosition(); 202          pos+=10000;//倒退10秒,10000毫秒 203          if(pos>len) pos=len; 204          mper.seekTo(pos); 205          tos.setText("倒退10秒"+pos/1000+"/"+len/1000); 206          tos.show(); 207   208      } 209   210      protected void onPause(){ 211          super.onPause(); 212   213          if(mper.isPlaying()){ 214              btnPlay.setText("继续"); 215              mper.pause(); 216          } 217   218      } 219   220      protected void onDestory(){ 221          mper.release();//释放MediaPlayer对象 222          super.onDestroy(); 223      } 224   225   226   227  } 228