如何通过 android 5 中的 intent 将文件发送到 google 云打印应用程序?
How to send file to google cloud printing app via intent in android 5?
我正在尝试让 google 云打印应用程序打印文档,无论是 .png 文件还是 pdf。检查应用程序是否通过
安装后
public static boolean isCloudPrintInstalled(Context ctx){
String packageName = "com.google.android.apps.cloudprint";
android.content.pm.PackageManager mPm = ctx.getPackageManager();
try{
PackageInfo info = mPm.getPackageInfo(packageName, 0);
boolean installed = (info != null);
return installed;
}catch(NameNotFoundException e){
return false;
}
}
如果缺少 PrintingDialogActivity,我会将用户发送到 PrintingDialogActivity,如下所述:https://developers.google.com/cloud-print/docs/android
但我想使用该应用程序,如果已安装的话。如果我发送以下意图:
File theFile = new File(filePath); //file is NOT missing
Intent printIntent = new Intent(Intent.ACTION_SEND);
printIntent.setType(Helper.getMimeType(filePath));
printIntent.putExtra(Intent.EXTRA_TITLE, titleOfFile);
printIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(theFile));
ctx.startActivity(printIntent);
getMimeType 方法是这样的:
public static String getMimeType(String url) {
String method = "Helper.getMimeType";
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
//Fix for Bug: https://code.google.com/p/android/issues/detail?id=5510
if(extension == null || extension.equals("")){
extension = url.substring(url.lastIndexOf('.'));
}
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
//should i consider just not using the MimeTypeMap? -.-
if(type == null || type.equals("")){
if(extension.toLowerCase(Locale.getDefault()).equals(".txt") == true){
type = "text/plain";
}else{
Log.e(method, "Unknown extension");
}
}
return type;
}
它 returns "application/pdf" 用于 pdf 文件。
在我的 android 4.0.3 设备上,我得到了操作选择器,可以选择 google 云打印应用程序,然后允许执行诸如将文件保存到 google 之类的操作驾驶。有效。
但如果我在我的 Android 5.1.1 设备 (Nexus 5) 上启动此 Intent,操作选择器也会打开,但它没有 google 云打印应用程序或任何东西其他与打印相关的内容。云打印已预安装,当前版本为 1.17b。我没有用某种形式的节能应用程序杀死它的过程。设备未路由。我错过了什么?
我还尝试手动输入 "text/html" 作为 mime 类型,因为这是另一个 Whosebug 线程的解决方案 - 但它没有解决我的问题。
将 mimetype 设置为 */* 也不会使 actionchooser 为我提供打印机
经过大量谷歌搜索和测试后,我不太清楚,如果通过意图打印仍然可以在 android 5 上使用 google 云打印。 但是 起作用的是创建自定义 PrintDocumentAdapter,如 post 中所述:
我正在尝试让 google 云打印应用程序打印文档,无论是 .png 文件还是 pdf。检查应用程序是否通过
安装后public static boolean isCloudPrintInstalled(Context ctx){
String packageName = "com.google.android.apps.cloudprint";
android.content.pm.PackageManager mPm = ctx.getPackageManager();
try{
PackageInfo info = mPm.getPackageInfo(packageName, 0);
boolean installed = (info != null);
return installed;
}catch(NameNotFoundException e){
return false;
}
}
如果缺少 PrintingDialogActivity,我会将用户发送到 PrintingDialogActivity,如下所述:https://developers.google.com/cloud-print/docs/android
但我想使用该应用程序,如果已安装的话。如果我发送以下意图:
File theFile = new File(filePath); //file is NOT missing
Intent printIntent = new Intent(Intent.ACTION_SEND);
printIntent.setType(Helper.getMimeType(filePath));
printIntent.putExtra(Intent.EXTRA_TITLE, titleOfFile);
printIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(theFile));
ctx.startActivity(printIntent);
getMimeType 方法是这样的:
public static String getMimeType(String url) {
String method = "Helper.getMimeType";
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
//Fix for Bug: https://code.google.com/p/android/issues/detail?id=5510
if(extension == null || extension.equals("")){
extension = url.substring(url.lastIndexOf('.'));
}
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
//should i consider just not using the MimeTypeMap? -.-
if(type == null || type.equals("")){
if(extension.toLowerCase(Locale.getDefault()).equals(".txt") == true){
type = "text/plain";
}else{
Log.e(method, "Unknown extension");
}
}
return type;
}
它 returns "application/pdf" 用于 pdf 文件。
在我的 android 4.0.3 设备上,我得到了操作选择器,可以选择 google 云打印应用程序,然后允许执行诸如将文件保存到 google 之类的操作驾驶。有效。
但如果我在我的 Android 5.1.1 设备 (Nexus 5) 上启动此 Intent,操作选择器也会打开,但它没有 google 云打印应用程序或任何东西其他与打印相关的内容。云打印已预安装,当前版本为 1.17b。我没有用某种形式的节能应用程序杀死它的过程。设备未路由。我错过了什么?
我还尝试手动输入 "text/html" 作为 mime 类型,因为这是另一个 Whosebug 线程的解决方案 - 但它没有解决我的问题。
将 mimetype 设置为 */* 也不会使 actionchooser 为我提供打印机
经过大量谷歌搜索和测试后,我不太清楚,如果通过意图打印仍然可以在 android 5 上使用 google 云打印。 但是 起作用的是创建自定义 PrintDocumentAdapter,如 post 中所述: