我的应用程序具有的一项功能是能够从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();
}
}