从Android中的电子邮件附件中以.gpx扩展名打开文件

时间:2014-06-03 08:57:43

标签: android

我的应用程序具有的一项功能是能够从SD卡(文件)或电子邮件附件导入.gpx文件。我没有任何问题使它只用于处理SD卡上的文件,但打开附件我有一个问题。唯一适用于我的开放附件的解决方案是放入清单:数据android:mimeType =" text / xml" 用于导入.gpx文件的活动。但有了这个解决方案我的应用程序也可以打开所有的xml文件,这是我不想要的东西。我希望它能够只打开.gpx附件。有人可以帮忙: - )

清单代码:

        <activity
        android:name=".TracksListActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <data
                android:host="*"
                android:mimeType="*/*"
                android:pathPattern=".*\\.gpx"
                android:scheme="file" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="text/xml" />
        </intent-filter>
    </activity>

导入.gpx文件的活动

        Intent intent = getIntent();
    if (intent == null)
        return;
    final Uri uri = intent.getData();
    if (uri == null)
        return;

    String scheme = uri.getScheme();

    if (ContentResolver.SCHEME_FILE.equals(scheme))
    {
        final File file = new File(uri.getPath());
        Log.d(LOG_TAG, file.getName());
        Log.d(LOG_TAG, file.getAbsolutePath());

        new AlertDialog.Builder(this)
                .setTitle(R.string.import_gpx)
                .setMessage(getString(R.string.would_you_like_to_import_the_gpx) + file.getName() + " ?")
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        InputStream is;

                        try
                        {
                            is = new FileInputStream(new File(file.getAbsolutePath()));
                        }
                        catch (FileNotFoundException e)
                        {
                            Log.e(LOG_TAG, e.getMessage());
                            return;
                        }

                        GpxParser gpxParser = new GpxParser(TracksListActivity.this);
                        gpxParser.importGpxFromFile(is);
                    }
                }).setNegativeButton(R.string.cancel, null).show();
    }
    else if (ContentResolver.SCHEME_CONTENT.equals(scheme))
    {
        final ContentResolver resolver = getContentResolver();

        new AlertDialog.Builder(this)
                .setTitle(R.string.import_gpx)
                .setMessage(getString(R.string.would_you_like_to_import_the_gpx_attach))
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        InputStream is;

                        try
                        {
                            is = resolver.openInputStream(uri);
                        }
                        catch (FileNotFoundException e)
                        {
                            Log.e(LOG_TAG, e.getMessage());
                            return;
                        }

                        GpxParser gpxParser = new GpxParser(TracksListActivity.this);
                        gpxParser.importGpxFromFile(is);
                    }
                }).setNegativeButton(R.string.cancel, null).show();
    }
}

0 个答案:

没有答案