EX08_09.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:7k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex08_09; 
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import java.net.URL;
  6. import java.net.URLConnection;
  7. import android.app.Activity; 
  8. import android.content.Intent;
  9. import android.media.RingtoneManager;
  10. import android.net.Uri;
  11. import android.os.Bundle; 
  12. import android.util.Log;
  13. import android.view.View; 
  14. import android.webkit.URLUtil;
  15. import android.widget.Button; 
  16. import android.widget.EditText;
  17. import android.widget.ImageView; 
  18. import android.widget.TextView; 
  19. import android.widget.Toast;
  20. public class EX08_09 extends Activity 
  21.   protected static final String APP_TAG = "DOWNLOAD_RINGTONE";
  22.   private Button mButton1; 
  23.   private TextView mTextView1;
  24.   private EditText mEditText1; 
  25.   private String strURL = "";
  26.   public static final int RINGTONE_PICKED = 0x108;
  27.   private String currentFilePath = "";
  28.   private String currentTempFilePath = "";
  29.   private String fileEx="";
  30.   private String fileNa="";
  31.   private String strRingtoneFolder = "/sdcard/music/ringtones";
  32.   
  33.   
  34.   /** Called when the activity is first created. */ 
  35.   @Override 
  36.   public void onCreate(Bundle savedInstanceState) 
  37.   { 
  38.     super.onCreate(savedInstanceState); 
  39.     setContentView(R.layout.main); 
  40.      
  41.     mButton1 =(Button) findViewById(R.id.myButton1); 
  42.     mTextView1 = (TextView) findViewById(R.id.myTextView1); 
  43.     mEditText1 = (EditText) findViewById(R.id.myEditText1);
  44.     
  45.     /*判断是否有/sdcard/music/ringtones文件夹*/ 
  46.     if(bIfExistRingtoneFolder(strRingtoneFolder))
  47.     {
  48.       Log.i(APP_TAG, "Ringtone Folder exists.");
  49.     }
  50.     
  51.     mButton1.setOnClickListener(new Button.OnClickListener() 
  52.     {
  53.       @Override
  54.       public void onClick(View arg0)
  55.       {
  56.         // TODO Auto-generated method stub
  57.         strURL = mEditText1.getText().toString(); 
  58.         
  59.          Toast.makeText(EX08_09.this, getString(R.string.str_msg)
  60.                   ,Toast.LENGTH_SHORT).show();
  61.        
  62.         /*取得文件名称*/
  63.         fileEx = strURL.substring(strURL.lastIndexOf(".")+1,strURL.
  64.                      length()).toLowerCase();
  65.         fileNa = strURL.substring(strURL.lastIndexOf("/")+1,strURL.
  66.                      lastIndexOf("."));
  67.         getFile(strURL);
  68.       }
  69.      });
  70.   }       
  71.   /* 判断文件MimeType的method */
  72.   private String getMIMEType(File f) 
  73.   { 
  74.     String type="";
  75.     String fName=f.getName();
  76.     /* 取得扩展名 */
  77.     String end=fName.substring(fName.lastIndexOf(".")+1,
  78.                             fName.length()).toLowerCase(); 
  79.     
  80.     /* 依扩展名的类型决定MimeType */
  81.     if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||
  82.         end.equals("xmf")||end.equals("ogg")||end.equals("wav"))
  83.     {
  84.       type = "audio"; 
  85.     }
  86.     else if(end.equals("3gp")||end.equals("mp4"))
  87.     {
  88.       type = "video";
  89.     }
  90.     else if(end.equals("jpg")||end.equals("gif")||
  91.              end.equals("png")||end.equals("jpeg")||
  92.               end.equals("bmp"))
  93.     {
  94.       type = "image";
  95.     }
  96.     else
  97.     {
  98.       type="*";
  99.     }
  100.     /*如果无法直接打开,就跳出软件列表给用户选择 */
  101.     if(end.equals("image")) 
  102.     { 
  103.     } 
  104.     else 
  105.     { 
  106.       type += "/*";  
  107.     } 
  108.     return type;  
  109.   }    
  110.   
  111.   private void getFile(final String strPath)
  112.   { 
  113.     try 
  114.     { 
  115.       if (strPath.equals(currentFilePath) ) 
  116.       {
  117.        getDataSource(strPath);  
  118.       }        
  119.       currentFilePath = strPath;      
  120.       Runnable r = new Runnable() 
  121.       {   
  122.         public void run()
  123.         {   
  124.           try 
  125.           { 
  126.             getDataSource(strPath);
  127.           } 
  128.           catch (Exception e) 
  129.           { 
  130.             Log.e(APP_TAG, e.getMessage(), e); 
  131.           } 
  132.         } 
  133.       };   
  134.       new Thread(r).start(); 
  135.     } 
  136.     catch(Exception e) 
  137.     { 
  138.       e.printStackTrace(); 
  139.     }
  140.   }
  141.   
  142.   /*取得远程文件*/ 
  143.   private void getDataSource(String strPath) throws Exception 
  144.   { 
  145.     if (!URLUtil.isNetworkUrl(strPath)) 
  146.     { 
  147.       mTextView1.setText("错误的URL"); 
  148.     } 
  149.     else 
  150.     { 
  151.       /*取得URL*/
  152.       URL myURL = new URL(strPath); 
  153.       /*创建连接*/
  154.       URLConnection conn = myURL.openConnection();   
  155.       conn.connect();   
  156.       /*InputStream 下载文件*/
  157.       InputStream is = conn.getInputStream();   
  158.       if (is == null) 
  159.       { 
  160.         throw new RuntimeException("stream is null"); 
  161.       }
  162.       
  163.       /*创建文件地址*/ 
  164.       File myTempFile = new File("/sdcard/music/ringtones/",
  165.                         fileNa+"."+fileEx);
  166.       /*取得站存盘案路径*/
  167.       currentTempFilePath = myTempFile.getAbsolutePath();
  168.       /*将文件写入暂存盘*/
  169.       FileOutputStream fos = new FileOutputStream(myTempFile);
  170.       byte buf[] = new byte[128];
  171.       do 
  172.       {   
  173.         int numread = is.read(buf);   
  174.         if (numread <= 0) 
  175.         { 
  176.           break; 
  177.         } 
  178.         fos.write(buf, 0, numread);   
  179.       }while (true);  
  180.       
  181.       /* 打开RingtonManager进行铃声选择 */
  182.       String uri = null;
  183.       if(bIfExistRingtoneFolder(strRingtoneFolder))
  184.       {
  185.         /*设置铃声*/
  186.         Intent intent = new Intent( RingtoneManager.
  187.                     ACTION_RINGTONE_PICKER);
  188.         /*设置显示铃声的文件夹*/
  189.         intent.putExtra( RingtoneManager.EXTRA_RINGTONE_TYPE,
  190.                     RingtoneManager.TYPE_RINGTONE);
  191.         /*设置显示铃声开头*/
  192.         intent.putExtra( RingtoneManager.EXTRA_RINGTONE_TITLE,
  193.                     "设置铃声");
  194.         if( uri != null)
  195.         {
  196.           intent.putExtra( RingtoneManager.
  197.                 EXTRA_RINGTONE_EXISTING_URI, Uri.parse( uri));
  198.         }
  199.         else
  200.         {
  201.           intent.putExtra( RingtoneManager.
  202.                 EXTRA_RINGTONE_EXISTING_URI, (Uri)null); 
  203.         }
  204.         startActivityForResult(intent, RINGTONE_PICKED);
  205.       }
  206.       
  207.       try 
  208.       { 
  209.         is.close(); 
  210.       } 
  211.       catch (Exception ex) 
  212.       { 
  213.         Log.e(APP_TAG, "error: " + ex.getMessage(), ex); 
  214.       } 
  215.     }
  216.   } 
  217.   
  218.   @Override
  219.   protected void onActivityResult(int requestCode, 
  220.                    int resultCode, Intent data)
  221.   {
  222.     // TODO Auto-generated method stub
  223.     if (resultCode != RESULT_OK)
  224.     {
  225.       return;
  226.     }
  227.     switch (requestCode)
  228.     { 
  229.       case (RINGTONE_PICKED):
  230.         try
  231.         {
  232.           Uri pickedUri = data.getParcelableExtra
  233.           (RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
  234.           if(pickedUri!=null)
  235.           {
  236.             RingtoneManager.setActualDefaultRingtoneUri
  237.             (EX08_09.this,RingtoneManager.TYPE_RINGTONE,
  238.                 pickedUri);
  239.           }
  240.         }
  241.         catch(Exception e)
  242.         {
  243.           e.printStackTrace();
  244.         }
  245.         break;
  246.       default:
  247.         break;
  248.     }
  249.     super.onActivityResult(requestCode, resultCode, data);
  250.   }
  251.   
  252.   /*判断是否/sdcard/music/ringtones文件夹*/
  253.   private boolean bIfExistRingtoneFolder(String strFolder)
  254.   {
  255.     boolean bReturn = false;
  256.     
  257.     File f = new File(strFolder);
  258.     if(!f.exists())
  259.     {
  260.       /*创建/sdcard/music/ringtones文件夹*/
  261.       if(f.mkdirs())
  262.       {
  263.         bReturn = true;
  264.       }
  265.       else
  266.       {
  267.         bReturn = false;
  268.       }
  269.     }
  270.     else
  271.     {
  272.       bReturn = true;
  273.     }
  274.     return bReturn;
  275.   }
  276. }