调用第三方打印apk Epson iPrint解决思路

原创 2015年11月21日 09:34:45

调用第三方打印apk Epson iPrint解决思路,目前仅有一个apk,爱普生打印,如何调用起来这个第三方apk?


1.使用反编译工具反编译爱普生打印APK,查看AndroidManifest.xml文件找到包名和爱普生打印预览Activity。

包名:package="epson.print"

打印预览界面Activity在AndroidManifest.xml的配置如下:

<activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:name="epson.print.ActivityDocsPrintPreview" android:screenOrientation="unspecified">
            <intent-filter>
                <span style="color:#ff0000;"><action android:name="android.intent.action.SEND"/></span>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <span style="color:#ff0000;"><data android:mimeType="application/pdf"/></span>
                <data android:mimeType="application/msword"/>
                <data android:mimeType="application/vnd.ms-excel"/>
                <data android:mimeType="application/vnd.ms-powerpoint"/>
                <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/>
                <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/>
                <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/>
                <data android:mimeType="text/csv"/>
                <data android:mimeType="application/rtf"/>
                <data android:mimeType="text/rtf"/>
                <data android:mimeType="text/comma-separated-values"/>
            </intent-filter>
        </activity>

上面加红的可以看出掉起来这个Activity需要actionandroid:name="android.intent.action.SEND"<data android:mimeType="application/pdf"/>

2.在自己的代码中开始调用,出现“文件无法打开”;

3. 分析可以知道,打印预览是从文件浏览中打开的。查看反编译后的源代码。

<activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:name="epson.print.fileBrower" android:screenOrientation="unspecified"/>

这个activity一定是文件浏览Activity,这个Activity源代码中会包含startActivity函数,并让intent携带对应的参数传递给ActivityDocsPrintPreview。具体可以使用软件就会发现这个逻辑。

查看反编译后的源代码确实找到对应的代码片段如下,红色部分正是线索,intent使用STREAM携带了Uri参数:

    const-string v3, "<span style="color:#ff0000;">android.intent.action.SEND</span>"

    invoke-virtual {v2, v3}, Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;

    .line 536
    const-string v3, "<span style="color:#ff0000;">android.intent.extra.STREAM</span>"

    invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v4

    invoke-static {v4}, <span style="color:#ff0000;">Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;</span>

    move-result-object v4

    invoke-virtual {v2, v3, v4}, Landroid/content/Intent;-><span style="color:#ff0000;">putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;</span>

    goto :goto_1

    .line 543
    .end local v2    # "myIntent":Landroid/content/Intent;
    :cond_2
    invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v3

    invoke-direct {p0, v3}, Lepson/print/fileBrower;->isFilePdf(Ljava/lang/String;)Z

    move-result v3

    if-nez v3, :cond_3

    invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v3

    invoke-static {v3}, Lepson/common/Utils;->isGConvertFile(Ljava/lang/String;)Z

    move-result v3

    if-eqz v3, :cond_5

    .line 545
    :cond_3
    invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v3

    invoke-direct {p0, v3}, Lepson/print/fileBrower;->getFileSize(Ljava/lang/String;)Z

    move-result v3

    if-eqz v3, :cond_4

    .line 546
    new-instance v2, Landroid/content/Intent;

    const-class v3, Lepson/print/ActivityDocsPrintPreview;

    invoke-direct {v2, p0, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    .line 548
    .restart local v2    # "myIntent":Landroid/content/Intent;
    const-string v3, "from"

    const/4 v4, 0x3

    invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;

    .line 550
    const-string v3, "send document"

    invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;

    .line 552
invoke-virtual {p0, v2}, Lepson/print/fileBrower;->startActivity(Landroid/content/Intent;)V

4.将上面的代码转化为调用爱普生打印apk的代码:

String epsonPrintApkPackageName = "epson.print";
Intent intent = new Intent();
intent.setAction("android.intent.action.SEND");
intent.setPackage(epsonPrintApkPackageName);
intent.setClassName(epsonPrintApkPackageName,"epson.print.ActivityDocsPrintPreview");
		
Uri uri = Uri.fromFile(new File(path));
intent.putExtra("android.intent.extra.STREAM", uri);
intent.setType("application/pdf");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_DEFAULT);
getBaseContext().startActivity(intent);

代码已经可以成功运行了,在调用第三方apk使用的时候,如果不确定传入的参数,可以从反编译后的源代码中找到一些线索,这确实是一种方法。

版权声明:本文为天涯原创文章,未经天涯允许不得转载。

【Java学习】元组类的简单使用

【Java学习】元组 —— 相关概念学习自《Thinking In Java》
  • u013201431
  • u013201431
  • 2014年09月04日 15:52
  • 1437

Java接口的使用,简单demo

简单的接口demo接口的应用,结合多态,传参的时候,形参为接口类型,实参为实现类的类型,这样针对不同的实参,有不同的实现,this called多态接口:IPrintpackage com.test....
  • kenamja
  • kenamja
  • 2015年05月06日 10:45
  • 1713

基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机

C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机支持并口,串口,网口,USB口,驱动方式等多种端口支持开关钱箱支...
  • sdvch
  • sdvch
  • 2015年04月16日 19:00
  • 6522

EPSON Printer 打印机 Sdk For Android

近日需求,有一个windows系统的设备web点餐系统,需要移植到Android 平板端, 需要考虑的交互主要就是通过 JS 传入打印数据到 WebView 之后,通过 Android 调用打印机打印...
  • a23006239
  • a23006239
  • 2017年12月22日 12:15
  • 296

Android下的POS打印机调用

Android在无驱动下的USB接口打印机调试
  • luyu1235211
  • luyu1235211
  • 2016年06月11日 18:11
  • 3780

调用第三方打印apk Epson iPrint解决思路

调用第三方打印apk Epson iPrint解决思路,目前仅有一个apk,爱普生打印,如何调用起来这个第三方apk?...
  • tyyj90
  • tyyj90
  • 2015年11月21日 09:34
  • 2185

在ubuntu中添加EPSON L485打印机

在ubuntu中添加EPSON L485打印机1. 配置EPSON L485打印机这一步基本上按照epson的说明书就可以搞定,L485可以像手机连接WIFI路由器那样,会自动搜索wifi热点,然后输...
  • u013553529
  • u013553529
  • 2017年07月17日 00:53
  • 1493

C# 实现Epson热敏打印机打印 Pos机用

public class EpsopnPrinter     { //打印文字(端口号 字符)         public static string PrintString(int Po...
  • sunway888
  • sunway888
  • 2012年06月28日 16:30
  • 2967

android接入第三方apk的解决方法

在实际的项目开发中经常会碰到想把第三方的apk程序直接集成进我们自己的应用中这样的情况。如果是自己编写的两个应用,那么因为已经知道了这两个应用的包名,所以我们很容易就能控制这两个程序之间的跳转问题。现...
  • u012505618
  • u012505618
  • 2015年12月16日 15:12
  • 1071

epson 680K2 690k换传感器软件

  • 2015年08月31日 16:13
  • 113KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调用第三方打印apk Epson iPrint解决思路
举报原因:
原因补充:

(最多只允许输入30个字)