Pointing to the first part of your question:
try
{
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
catch (ActivityNotFoundException e)
{
//tel the user to install viewer to perform this action
}
There's no need to specify the type. It will get it from the data URI.