2014-05-21 66 views
2

嗨我正在嘗試從我的應用程序中讀取電子郵件附件。在Android中從我的應用程序中讀取電子郵件附件文件時發現文件異常

當我點擊電子郵件附件它打開我的應用程序,並在我試圖使用下面的代碼

Intent CallingIntent = getIntent(); 
Uri data = CallingIntent.getData();  
final String scheme = data.getScheme(); 

if(ContentResolver.SCHEME_CONTENT.equals(scheme)) 
{  
    ContentResolver cr = getApplicationContext().getContentResolver(); 
    InputStream is; 
    try 
    { 
     is = cr.openInputStream(data); 
     if(is == null) 
     { 
      return; 
     } 

     StringBuffer buf = new StringBuffer();   
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     String str; 
     if (is!=null) 
     {       
      while ((str = reader.readLine()) != null) 
      { 
       buf.append(str); 
      }    
     }  
     is.close(); 
     Toast.makeText(getApplicationContext(), buf, Toast.LENGTH_SHORT).show();      
    } 
    catch (FileNotFoundException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

,並讀取該文件的內容時儘量使用語句is = cr.openInputStream(data);打開文件它給了我一個例外FileNotFoundException

任何可以建議如何在我的應用程序中完成此操作我可以在不下載附件的情況下閱讀附件的內容。

+0

雖然我沒有使用電子郵件附件,但我猜你沒有在'data'中獲取文件路徑。您需要將URI轉換爲實際的文件路徑。你可以在這裏發佈URI的價值嗎? –

+0

URI的值爲'content:// com.google.android.email.attachmentprovider/4/941/RAW' – Mayank

回答

-1

你需要從這個URI中提取真實的文件路徑。這個功能會返回你的路徑。

// replace this 
is = cr.openInputStream(data) 


//with 
is = cr.openInputStream(getPath(data)) 


public static String getPath(Uri uri) { 

    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = BigNoteActivity.instance.getContentResolver().query(
      uri, projection, null, null, null); 
    int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
+0

* may *對某些媒體有效,但對於content://方案完全不正確如上。 – 323go

相關問題