调用第三方打印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使用的时候,如果不确定传入的参数,可以从反编译后的源代码中找到一些线索,这确实是一种方法。

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

相关文章推荐

Epson iPrint:Dropbox、Evernote云端文件直接印

Epson iPrint 是 Epson 旗下的具有无线打印功能的手机应用,该应用能够通过WiFi将手机和打印机相连,让你无需带任何数据线即可在手机上完成打印照片、打印文档、打印网页、打印云端文件...

调用第三方服务API的SDK编写思路

思路 通过将SDK方法中返回的数据划分为正常返回数据以及错误返回的数据两部分,让调用者更简单的对接口调用错误进行处理。将SDK调用第三方服务接口的流程划分为: 数据准备,http请求,结果处理三...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Launcher中动态加载其它APK中Activity的问题解决思路

最近在基于Launcher实现一个动态加载应用的框架,Launcher中的某一屏的显示分成3个部分:上侧、左侧、右侧;左侧、上侧这两部分都需要通过动态加载来实现。       这样实现的好处是:由于我...

MTK 平台Android6.0 系统集成第三方apk 的解决策略

比如我要集成的apk 的名字叫ATest.apk 1.在package/app/目录下面面加入一个文件夹文件夹名字:ATest(这里最好使用apk 一样的名字,方便以后更好的代码维护,如果使用其它随便...

Android开发,在一个项目中调用(启用)已经安装的第三方apk应用软件

在Android开发时,有时我们需要调用第三方的软件来完善我们项目的功能,这个该如何实现呢? 关键在于:我们要拿到第三方apk应用软件的package包名和class名称。 这里,我拿"彩虹天气"...

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

C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机 支持并口,串口,网口,USB口,驱动方式等多种端口 支持开关钱...

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

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

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

C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机) 收藏  C#版OPOS打印基于北洋OPOS SDK二次开发包,支持...
  • rise51
  • rise51
  • 2011-04-02 21:58
  • 3673

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

C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机 支持并口,串口,网口,USB口,驱动方式等多种端口 支持开关钱...
  • yw1688
  • yw1688
  • 2012-07-29 18:10
  • 4452
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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