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

最近公司有个需求实现手机端打印合同的功能。上网搜索了一通,没靠谱的。走一些歪门邪道调用第三方软件实现打印功能。这里选择对printershare下手。下载软件分析其中的源码。看其中的清单文件



<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目录静默安装(比较流氓),推荐第一种办法。

其他自由发挥吧

你可能感兴趣的:(Android开发)