Android端无线打印功能实现(附带源码Demo)

最近公司有个需求实现手机端打印合同的功能。上网搜索了一通,没靠谱的。走一些歪门邪道调用第三方软件实现打印功能。这里选择对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目录静默安装(比较流氓),推荐第一种办法。

其他自由发挥吧

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
产品特色: PrinterShare移动打印直接打印手机上的文件、包括来自SD 卡及Google 文件、Gmail、相片、联络资料、行事历、SMS/MMS、通话记录及网页的文件(DOC、DOCX、XLS、XSLX、PPT、 PPTX、PDF、TXT)。 功能: *经由Wi-Fi 或蓝牙,即可在附近的印表机直接列印,无须使用电脑; *列印至附近PC 或Mac 共享的印表机; *无限次远列印。接收(Mac 或PC) 无须购买页数或订用服务。 近列印:如果您有Wi-Fi 或蓝牙印表机,就可直接在该印表机上列印。在主选单中选择附近的印表机,然后选择想要使用的印表机即可。如果您的印表机并不支援此功能,Windows 用户可到printershare.com 下载我们免费提供的软件,并在安装软件后共用您的印表机。 Mac 用户则可使用内建的Mac OS X Printer Sharing 服务来共享印表机。近列印服务需使用PrinterShare Premium Key。您可在Market 购买Premium Key,或者到printershare.com 以PayPal 付款购买。购买Premium Key 之前,我们强烈建议您首先列印测试页面。 远列印:您可经由互联网,在世上所有角落进行列印,包括您自己的印表机。接收列印要求的一,无论使用Mac 还是PC,均须进入printershare.com 取得我们的免费软件并加以安装,才能共享印表机。您在装置里找到共享印表机后,就能列印。远列印须使用PrinterShare 用户帐户。如果电脑和装置都由您控制,我们建议两者均使用相同的帐户注册。使用Premium Key 后,远列印的限制就会取消。否则,接收列印要求的一方,就须购买页数或订用付费服务。首 20 页费用全免。 云列印:PrinterShare 支援Google 云列印,无须另行收费。要执行云列印,您的电脑上需要安装最新版本的Google Chrome 浏览器。如欲取得更多设定指示,请参阅google.com/support/cloudprint 从装置上列印时,我们一般建议使用Wi-Fi 或3/4G,以获得更佳效能。但是,EDGE/GPRS 或任何其他连接方式也能使用。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值