Android 使用第三方软件PrinterShare实现USB 或WIFI 打印功能

想要调用第三方软件首先必须知道intent
这里使用逆向工具获取清单文件的IntentFilter

PrinterShare 清单

 <activity android:configChanges="keyboardHidden|locale|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="keyboardHidden|locale|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="keyboardHidden|locale|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="keyboardHidden|locale|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:scheme="content"/>
                <data android:scheme="file"/>
                <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>

主要就4个Activity

  • ActivityPrintPDF 打印PDF
  • ActivityPrintDocuments 打印文档
  • ActivityPrintPictures 打印图片
  • ActivityWeb 打印网页

最后根据intent-filter 封装工具类

package me.leon;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.text.TextUtils;

import java.io.File;

/**
 * <p>description:</p>
 * <p>author:Leon</p>
 * <p>date:2019/7/18 0018</p>
 * <p>e-mail:deadogone@gmail.com</p>
 */
public class PrinterShareMgr {
    private static PrinterShareMgr mgr = new PrinterShareMgr();

    public static PrinterShareMgr getInstance() {
        return mgr;
    }

    private PrinterShareMgr() {
    }

    public void printFile(Context context, String filePath) {
        if (TextUtils.isEmpty(filePath)) {
            return;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        Uri data = Uri.fromFile(new File(filePath));
        ComponentName comp = null;
        if (filePath.endsWith("pdf")) {
            intent.setDataAndType(data,"application/pdf");
            comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityPrintPDF");
        } else if (filePath.endsWith("doc") || filePath.endsWith("docx")||filePath.endsWith("txt")){
            intent.setDataAndType(data,"application/doc");
            comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityPrintDocuments");
        }else if (filePath.endsWith("jpg") || filePath.endsWith("jpeg") || filePath.endsWith("gif") || filePath.endsWith("png")){
            intent.setDataAndType(data,"image/jpeg");
            comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityPrintPictures");
        }else if (filePath.endsWith("html")||filePath.endsWith("htm")){
            intent.setDataAndType(data,"text/html");
            comp = new ComponentName("com.dynamixsoftware.printershare", "com.dynamixsoftware.printershare.ActivityWeb");
        }
        intent.setComponent(comp);
        context.startActivity(intent);
    }
}

Note:

  1. 安装PrinterShare完成后 请自行更新对应打印机驱动
  2. 请自行兼容android 7.0 及补全未包含的文件格式
  3. 隐藏导航栏时,打印成功无法返回

参考
https://blog.csdn.net/qilin001cs/article/details/54616108
附件下载:
PrinterShare
AndroidKiller 1.3.1 csdn 蓝奏

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值