美文网首页安卓工作记录
[Android] 调用第三方app(未知包名情况)

[Android] 调用第三方app(未知包名情况)

作者: 闭门造折 | 来源:发表于2019-03-04 00:38 被阅读0次

    毕设需要实现一个app,暂且称为MyApp
    其中有一个功能是调用另一个相机配套app(称为CameraApp好了)进行拍照

    在网上查找了如何在一个app中调用另一个app
    参考资料:《Android APP打开另一个APP完整逻辑实现》
    这篇文章很详细的说明了如何调用。

    但是第三方app存在两个问题
    1:如果该app很有名,如高德地图等,网上就可以找到他们的包名、scheme等信息调用即可。但是如果该app很冷门,如我们使用的相机配套app,得不到包名,最简单的通过包名调用的方法就暂时失败了。
    2:有的方法中说可以实现隐式调用,但是第三方软件我们无法直接对原app进行修改

    最终决定从问题1入手,通过反编译的方式,获取apk的包名(这个过程意外的简单)

    参考资料:《Android APK反编译 apktool使用教程》
    按照里面的步骤,首先下载一个jar文件和一个bat文件,然后放在C://windows下

    通过cmd打开到apk所在位置,运行指令

    apktool d apk的名字.apk
    

    我们就会得到很多的文件,打开AndroidMenifest.xml,看到如下内容(截取有效内容)

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <manifest 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.wifidevice.coantec.activity">
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        
        <application android:allowBackup="true" android:icon="@drawable/yaya" android:label="@string/app_name" android:theme="@style/AppTheme">
            <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:name="com.methnm.coantec.activity.MainActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
            <activity android:name="com.methnm.coantec.activity.Home" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
            <activity android:name="com.methnm.coantec.activity.FileActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
            <activity android:name="com.methnm.coantec.activity.PhotoGridviewActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
    

    很清晰地看到,package的名字为"com.wifidevice.coantec.activity"
    主类的名字为“com.methnm.coantec.activity.MainActivity”

    重新找到上面进行包名app调用的教程,照葫芦画瓢进行调用(我的app中是给调用操作绑定了一个按钮)

    // 调用拍照按钮
    Button cameraButton = (Button) findViewById(R.id.camera_button);
    cameraButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TestLog, "Took photo");
            Intent intent = new Intent();
            //包名 包名+类名(全路径)
            ComponentName comp = new ComponentName("com.wifidevice.coantec.activity","com.methnm.coantec.activity.MainActivity");
            intent.setComponent(comp);
            intent.setAction("android.intent.action.MAIN");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    });
    

    运行测试一下,成功!
    中途其实还是失败了一小下的,我原以为主类的前半段com.methnm.coantec.activity就是包名,所以Android一直提示找不到对应的app,改进后就直接通过了

    相关文章

      网友评论

        本文标题:[Android] 调用第三方app(未知包名情况)

        本文链接:https://www.haomeiwen.com/subject/fpbvuqtx.html