Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中activity可以響應外部的action的例子(可以用這個來導入外部文件)

android中activity可以響應外部的action的例子(可以用這個來導入外部文件)

編輯:關於Android編程

如果我們在文件浏覽器中點擊一個文件,然後點擊它,會彈出一個列表給你選擇\

 

 

如果使自己的應用也出現在這個列表上,必須在menifest的這個activity下加入:

 

        
            
                
                
            
            
                
                

                
                

                
                
                
                
                
                
                
                
                
                
                
                
                

            
            
                

                

                
       
                
            
                
                
                
                
                

            
        

然後在activity的oncreate上接收這個intent:

 

 

		Intent intent = this.getIntent();
		int flags = intent.getFlags();
		if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
			if (intent.getAction() != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
				if (SCHEME_FILE.equals(intent.getScheme()) || SCHEME_CONTENT.equals(intent.getScheme())) {

					String i_type = getIntent().getType();

					// mImportingUri=file:///storage/emulated/0/Vlog.xml
					intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
					mImportingUri = intent.getData();
					System.out.println(====mImportingUri= + mImportingUri);
					
					InputStream is = null;
					try {
						is = getContentResolver().openInputStream(mImportingUri);
					} catch (Exception e) {
						System.out.println(====e=+e);
					}
					
					if (mImportingUri != null && SCHEME_FILE.equalsIgnoreCase(mImportingUri.getScheme())) {
						//Is file
						startToCopyFile(is);
					}else if(mImportingUri != null && SCHEME_CONTENT.equalsIgnoreCase(mImportingUri.getScheme())){
						startCopyMedia(is);
					}
					
				}
			}
		}

這裡如果發現要導入的文件是media的格式

 

 

private boolean startCopyMedia(InputStream is) {
		Cursor c = null;
		try {
			c = getContentResolver().query(mImportingUri, 
					new String[] {MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.SIZE}, 
					null, null, null);
			if (c != null && c.moveToFirst()) {
				int dn_index = c.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
				fromFileName = c.getString(dn_index);
				int s_index = c.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE);
				fromFileSize = c.getLong(s_index);	
			}
		} catch (Exception e) {
			System.out.println(===query e=+e);
		}
		return true;
	}

如果發現要導入的文件是txt格式,則我們在sd卡下建立一個tmp的文件夾,把這個文件拷貝進去:

 

 

	public static void makesureFileExist(String path) {
		String separator = File.separator;
		int index = path.lastIndexOf(separator);
		path = path.substring(0, index);
		File f = new File(path);
		f.mkdirs();

		File f1 = new File(path);
		try {
			f1.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static String getSDPath(){
	       File sdDir = null;
	       boolean sdCardExist = Environment.getExternalStorageState()  
	                           .equals(android.os.Environment.MEDIA_MOUNTED);   //判斷sd卡是否存在
	       if(sdCardExist)  
	       {               
	         sdDir = Environment.getExternalStorageDirectory();//獲取跟目錄
	      }  
	       if(sdDir!=null){
	    	   return sdDir.toString();
	       }else
	    	   return null;
	      
	}
	
	
	private String getName(Uri uri) {
		String str = uri.toString();
		int index = str.lastIndexOf(File.separator);
		String name = str.substring(index,str.length());
		return name;
	}
	

	private boolean startToCopyFile(InputStream is) {
		
		String fileName = getSDPath()+tmpPath+File.separator+getName(mImportingUri);
		makesureFileExist(fileName);
		File toFile = new File(fileName);
		CopyThread mCopyThread = new CopyThread(is, toFile);
		new Thread(mCopyThread).start();
		return true;
	}

	
	
	private class CopyThread implements Runnable {

		private File toFile;
		private InputStream fosfrom = null;
		
		
		public CopyThread(InputStream fosfrom, File toFile) {
			this.fosfrom = fosfrom;
			this.toFile = toFile;
		}
		
		@Override
		public void run() {
			try {
				TimeUnit.MILLISECONDS.sleep(800);
				
				FileInputStream fosfrom = null;
				if (this.fosfrom != null) {
					fosfrom = (FileInputStream) this.fosfrom;
				}
				FileOutputStream fosto = new FileOutputStream(toFile);
				byte bt[] = new byte[1024];
				int c;
				int time = 0;
				while ((c = fosfrom.read(bt)) > 0) {
					fosto.write(bt, 0, c);
				}
				if (fosfrom != null) {
					fosfrom.close();
				}
				fosto.close();
				
			} catch (Exception e) {
				return;
			} finally {
				try {
					if (this.fosfrom != null) {
						this.fosfrom.close();
					}
				} catch (IOException e) {
				}
			}
		}
	}
	
 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved