最近公司有个需求实现手机端打印合同的功能。上网搜索了一通,没靠谱的。走一些歪门邪道调用第三方软件实现打印功能。这里选择对printershare下手。下载软件分析其中的源码。看其中的清单文件
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.dynamixsoftware.printershare" platformBuildVersionCode="23" platformBuildVersionName="6.0-2704002">
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" anyDensity="true"/>
<application android:allowBackup="false" android:debuggable="false" android:hardwareAccelerated="false" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true" android:logo="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.App" android:theme="@style/AppTheme">
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityStart"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityMain">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityContacts"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityMessages"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityDocsBrowser"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityGDocsBrowser"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityGmail"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityGmailConversation"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityWeb">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="file"/>
<data android:scheme="content"/>
<data android:mimeType="text/html"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.htm"/>
<data android:pathPattern=".*\\.html"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.SEND"/>
<data android:mimeType="text/*"/>
</intent-filter>
</activity>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityPrintPDF">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:mimeType="application/pdf"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.SEND"/>
<data android:mimeType="application/pdf"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.pdf"/>
</intent-filter>
</activity>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityPrintDocuments">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="application/vnd.ms-word"/>
<data android:mimeType="application/msword"/>
<data android:mimeType="application/doc"/>
<data android:mimeType="application/vnd.msword"/>
<data android:mimeType="application/winword"/>
<data android:mimeType="application/word"/>
<data android:mimeType="application/x-msw6"/>
<data android:mimeType="application/x-msword"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
<data android:mimeType="application/vnd.ms-excel"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
<data android:mimeType="application/vnd.ms-powerpoint"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
<data android:mimeType="application/haansofthwp"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.SEND"/>
<data android:mimeType="message/rfc822"/>
<data android:mimeType="application/vnd.ms-word"/>
<data android:mimeType="application/msword"/>
<data android:mimeType="application/doc"/>
<data android:mimeType="application/vnd.msword"/>
<data android:mimeType="application/winword"/>
<data android:mimeType="application/word"/>
<data android:mimeType="application/x-msw6"/>
<data android:mimeType="application/x-msword"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
<data android:mimeType="application/vnd.ms-excel"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
<data android:mimeType="application/vnd.ms-powerpoint"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
<data android:mimeType="application/haansofthwp"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.txt"/>
<data android:pathPattern=".*\\.doc"/>
<data android:pathPattern=".*\\.docx"/>
<data android:pathPattern=".*\\.xls"/>
<data android:pathPattern=".*\\.xlsx"/>
<data android:pathPattern=".*\\.ppt"/>
<data android:pathPattern=".*\\.pptx"/>
<data android:pathPattern=".*\\.hwp"/>
</intent-filter>
</activity>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityDriversBrowser"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrinters"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityCloudPrinters"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityLocalPrinters"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityFindPrinters"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityProfile"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityProfileEdit"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityAbout"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityHelp"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPreview" android:screenOrientation="sensor"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:icon="@drawable/icon_title" android:name="com.dynamixsoftware.printershare.ActivityPrintPictures">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:mimeType="image/gif"/>
<data android:mimeType="image/png"/>
<data android:mimeType="image/jpeg"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<data android:mimeType="image/gif"/>
<data android:mimeType="image/png"/>
<data android:mimeType="image/jpeg"/>
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.gif"/>
<data android:pathPattern=".*\\.png"/>
<data android:pathPattern=".*\\.jpeg"/>
<data android:pathPattern=".*\\.jpg"/>
</intent-filter>
<intent-filter>
<action android:name="com.sec.android.app.mobileprint.PRINT"/>
<action android:name="com.sec.android.app.mobileprint.PRINT_SETTING"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintContacts"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintMessages"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintCallLog"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityCalendar"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintCalendar"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintWeb"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintGmail"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintAndroid"/>
<activity android:configChanges="locale|keyboardHidden|orientation|screenSize" android:name="com.dynamixsoftware.printershare.ActivityPrintTestPage"/>
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:hardwareAccelerated="true" android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.Translucent"/>
<service android:name="com.dynamixsoftware.printershare.AndroidPrintService" android:permission="android.permission.BIND_PRINT_SERVICE">
<intent-filter>
<action android:name="android.printservice.PrintService"/>
</intent-filter>
</service>
<receiver android:name="com.dynamixsoftware.printershare.BoxOneCloud">
<intent-filter>
<action android:name="com.box.android.VIEW_FILE"/>
<data android:mimeType="image/gif"/>
<data android:mimeType="image/png"/>
<data android:mimeType="image/jpeg"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="application/pdf"/>
<data android:mimeType="application/vnd.ms-word"/>
<data android:mimeType="application/msword"/>
<data android:mimeType="application/doc"/>
<data android:mimeType="application/vnd.msword"/>
<data android:mimeType="application/winword"/>
<data android:mimeType="application/word"/>
<data android:mimeType="application/x-msw6"/>
<data android:mimeType="application/x-msword"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
<data android:mimeType="application/vnd.ms-excel"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
<data android:mimeType="application/vnd.ms-powerpoint"/>
<data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
<data android:mimeType="application/haansofthwp"/>
</intent-filter>
<intent-filter>
<action android:name="com.box.android.LAUNCH"/>
<action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>
</receiver>
</application>
<uses-feature android:name="android.hardware.telephony" android:required="false"/>
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
<uses-feature android:name="android.hardware.wifi" android:required="false"/>
<uses-feature android:name="android.hardware.usb.host" android:required="false"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH"/>
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.mail"/>
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.wise"/>
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.writely"/>
</manifest>
这里面找到了各种文档格式的Activity我们只需要调用相应的Intent就可以了。
String path = SDCardUtils.getSDCardRootDir()+"/hetong.docx";
File doc= new File(path);
Logger.e(path);
// ComponentName comp = new ComponentName("com.dynamixsoftware.printershare","com.dynamixsoftware.printershare.ActivityPrintPDF");
ComponentName comp = new ComponentName("com.dynamixsoftware.printershare","com.dynamixsoftware.printershare.ActivityPrintDocuments");
Intent intent = new Intent();
intent.setComponent(comp);
intent.setAction("android.intent.action.VIEW");
intent.setType("application/doc");
intent.setData(Uri.fromFile(doc));
startActivity(intent);
OK,功能实现。关于软件中调用的时候你可以引导用户去下载对应的printershare或者自己把这个软件放到asserts目录静默安装(比较流氓),推荐第一种办法。
其他自由发挥吧