2012-07-26 66 views
0

我在Android 2.3.3上啓動了一個需要導入本地.vcf文件的應用程序。 我嘗試導入它推出的意圖IO EXCEPTION導入Android中的本地.vcf文件

final String pathDownload = Environment.getExternalStorageDirectory()+"/vcard1.vcf"; 

    Intent i = new Intent(); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.setAction(android.content.Intent.ACTION_VIEW); 
    i.setDataAndType(Uri.parse(pathDownload), "text/x-vcard"); 
    activity.startActivity(i); 

但這導致拋出即使該文件存在,它可以很容易地從 任何文件管理器進口。有任何想法嗎?

07-26 12:10:04.995: I/ActivityManager(307): START {act=android.intent.action.VIEW dat=/storage/sdcard0/vcard1.vcf typ=text/x-vcard flg=0x10000000 cmp=com.android.contacts/.vcard.ImportVCardActivity u=0} from pid 7681 
07-26 12:10:05.050: I/ActivityManager(307): START {cmp=com.android.contacts/.vcard.SelectAccountActivity u=0} from pid 7604 
07-26 12:10:05.057: I/SelectAccountActivity(7604): The number of available accounts: 2 
07-26 12:10:05.057: I/AccountSelectionUtil(7604): The number of available accounts: 2 
07-26 12:10:10.065: I/ActivityManager(307): Displayed com.android.contacts/.vcard.SelectAccountActivity: +5s15ms (total +5s26ms) 
07-26 12:10:19.190: I/VCardImport(7604): Starting vCard import using Uri /storage/sdcard0/vcard1.vcf 
07-26 12:10:19.198: I/VCardImport(7604): Bind to VCardService. 
07-26 12:10:19.307: I/VCardImport(7604): Connected to VCardService. Kick a vCard cache thread (uri: [/storage/sdcard0/vcard1.vcf]) 
07-26 12:10:19.307: I/VCardImport(7604): vCard cache thread starts running. 
07-26 12:10:19.315: I/VCardImport(7604): Copy a Uri to app local storage (/storage/sdcard0/vcard1.vcf -> import_tmp_0.vcf) 
07-26 12:10:19.315: E/VCardImport(7604): IOException during caching vCard 
07-26 12:10:19.315: E/VCardImport(7604): java.io.FileNotFoundException: No content provider: /storage/sdcard0/vcard1.vcf 
07-26 12:10:19.315: E/VCardImport(7604): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:708) 
07-26 12:10:19.315: E/VCardImport(7604): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:612) 
07-26 12:10:19.315: E/VCardImport(7604): at android.content.ContentResolver.openInputStream(ContentResolver.java:447) 
07-26 12:10:19.315: E/VCardImport(7604): at com.android.contacts.vcard.ImportVCardActivity$VCardCacheThread.copyTo(ImportVCardActivity.java:392) 
07-26 12:10:19.315: E/VCardImport(7604): at com.android.contacts.vcard.ImportVCardActivity$VCardCacheThread.run(ImportVCardActivity.java:300) 
07-26 12:10:19.315: I/VCardImport(7604): Finished caching vCard. 
07-26 12:10:19.339: I/ActivityManager(307): Displayed com.android.contacts/.vcard.ImportVCardActivity: +14s303ms 

UPDATE:意圖更改爲:

 Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(pathDownload)); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.setType("text/x-vcard"); 
    activity.startActivity(i); 

我可以導入任何2.1 VCF文件。但是,如果我試圖用3.0 VCF同這裏的什麼發生了:

07-26 15:55:40.783: I/VCardImport(2453): Bind to VCardService. 
07-26 15:55:40.923: I/VCardImport(2453): Connected to VCardService. Kick a vCard cache thread (uri: [file:///storage/sdcard0/Podcasts/vcard1.vcf]) 
07-26 15:55:40.923: I/VCardImport(2453): vCard cache thread starts running. 
07-26 15:55:40.931: I/VCardImport(2453): Copy a Uri to app local storage (file:///storage/sdcard0/Podcasts/vcard1.vcf -> import_tmp_1.vcf) 
07-26 15:55:40.939: W/vCard(2453): Property name unsupported by vCard 2.1: N 
07-26 15:55:40.939: W/vCard(2453): Property name unsupported by vCard 2.1: ORG 
07-26 15:55:40.947: W/vCard(2453): The value unsupported by TYPE of 1: 
07-26 15:55:40.955: E/VCardImport(2453): Maybe the file is in wrong format 
07-26 15:55:40.955: E/VCardImport(2453): com.android.vcard.exception.VCardException: Space exists at the beginning of the line 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.vcard.VCardParserImpl_V30.getNonEmptyLine(VCardParserImpl_V30.java:124) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.vcard.VCardParserImpl_V21.parseItem(VCardParserImpl_V21.java:306) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.vcard.VCardParserImpl_V21.parseItems(VCardParserImpl_V21.java:289) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.vcard.VCardParserImpl_V21.parseOneVCard(VCardParserImpl_V21.java:226) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.vcard.VCardParserImpl_V21.parse(VCardParserImpl_V21.java:932) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.vcard.VCardParser_V30.parse(VCardParser_V30.java:87) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.contacts.vcard.ImportVCardActivity$VCardCacheThread.constructImportRequest(ImportVCardActivity.java:478) 
07-26 15:55:40.955: E/VCardImport(2453): at com.android.contacts.vcard.ImportVCardActivity$VCardCacheThread.run(ImportVCardActivity.java:339) 
07-26 15:55:40.955: I/VCardImport(2453): Finished caching vCard. 

清單權限:

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_CONTACTS"/> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
+0

可以張貼pathDownload' – MAC 2012-07-26 10:30:50

+0

最終字符串pathDownload = Environment.getExternalStorageDirectory()+ 「/ vcard1.vcf」 的'值; – Sfrinz 2012-07-26 10:37:56

+0

你有問題的解決方案嗎? – Dharmendra 2013-12-30 11:09:36

回答

0
java.io.FileNotFoundException: No content provider: /storage/sdcard0/vcard1.vcf 

上面清清楚楚地寫着文件不可用

和你給清單文件中的權限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

該文件存在,事實上新文件(pathdownload).exist()始終返回true。在清單中,我有以下權限:\t <使用權限android:name =「android.permission.GET_ACCOUNTS」/> \t <使用權限android:name =「android.permission.WRITE_EXTERNAL_STORAGE」/> \t <使用權限android:name =「android.permission.READ_CONTACTS」/> – Sfrinz 2012-07-26 10:32:33

+0

是否有任何文件夾在名爲** sdcard0 **的SD卡中? – MAC 2012-07-26 10:33:11

+0

vcf的路徑是正確的,我得到它:Environment.getExternalStorageDirectory() – Sfrinz 2012-07-26 10:35:42