如何从intent filer打开.vcf?

时间:2016-03-08 23:40:30

标签: android vcard

您好我试图创建一个可以打开.vcf文件的应用程序。主要来自短信应用程序,我已经让它工作,我可以使用以下代码和androidmanifest.xml打开我的应用程序

 <activity android:name=".Home"
       android:parentActivityName=".MapsActivity">

       <meta-data android:name="android.support.PARENT_ACTIVITY"
        android:value="MapsActivity" />
           <intent-filter android:label="Open iLocation">
              <action android:name="android.intent.action.VIEW" />
               <action android:name="android.intent.action.EDIT" />
               <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                  <data android:scheme="content" />
                  <data android:mimeType="text/x-vcard" />
           </intent-filter>
       <intent-filter android:label="Open iLocation">
           <action android:name="android.intent.action.VIEW" />
           <action android:name="android.intent.action.EDIT" />
           <category android:name="android.intent.category.DEFAULT" />
           <data android:scheme="file" />
           <data android:mimeType="text/x-vcard" />
           <data android:pathPattern=".*\.vcf" />
           <data android:pathPattern=".*\..*\.vcf" />
           <data android:pathPattern=".*\..*\..*\.vcf" />
           <data android:pathPattern=".*\..*\..*\..*\.vcf" />
           <data android:pathPattern=".*\..*\..*\..*\..*\.vcf" />
           <data android:host="*" />
       </intent-filter>
   </activity>

这会打开我的.Home文件,但我不确定如何从文件中获取数据。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

要获得代表您要查看或修改的内容的Uri,请致电getIntent().getData()。然后,您可以使用ContentResolveropenInputStream()获取InputStream您要提供查看或修改的实际内容,并Uri

就vCard本身而言,就传统的Java API而言,Android没有内置的vCard解析功能。您的选择是:

  • 使用this third-party library

  • 找到另一个第三方库或其他vCard解析大量代码(例如,联系人应用程序应该在某处有一些)

  • 根据需要滚动您自己的解析器

答案 1 :(得分:0)

<html>
<head> 
<script type="text/javaScript" ><!--
function pressOk(){
            opener.fnCallBack("From Pop");
	    	window.close();
}
</script>
</head>
<body>
<input type="button" value="OK" onclick="pressOk();" />
</body>
</html>

得到意向结果.....

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { 
     mIntent.setAction(Intent.ACTION_GET_CONTENT);
     mIntent.setType("text/x-vcard");
     startActivityForResult(mIntent, 1);
} else {
     mIntent.setAction(Intent.ACTION_OPEN_DOCUMENT);
     mIntent.addCategory(Intent.CATEGORY_OPENABLE);
     mIntent.setDataAndType(Uri.fromFile(contactFolder), "text/x-vcard");
     startActivityForResult(Intent.createChooser(mIntent, "Select File"), 2);
}

答案 2 :(得分:0)

实际上这不是一个非常复杂的过程。只需确保您从FileProvider获得Uri,就能触发电话簿选择器意图。

然后,您将可以使用.vcf导入联系人。

private fun saveVcfFile(savedVCard: File) {
    try {
        val intent = Intent(Intent.ACTION_VIEW)
        val uri = FileProvider.getUriForFile(
            this,
            "${BuildConfig.APPLICATION_ID}.fileprovider",
            savedVCard
        )
        intent.setDataAndType(uri, contentResolver.getType(uri))
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        startActivity(intent)
    } catch (exception: Exception) {
        // TODO: Handle Exception
    }
}