如何通过android的应用程序调用另一个应用程序(没有源文件只有安装的apk) AIDL 是调用service的。还可以通过intent, broadcast调用第三方的APK中的组件。但前提是要你知道这些组件的intent-filter,并且他们是开放的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你必须了解apk里面所处理的Intent,然后使用StartActivity或StartActivityForResult去调用。 你们回复的都不是很理想,还是谢谢你们。这也是一个初学者给我提供的办法,很简单就解决了。这种方法对于调用我们自己写的应用程序没有问题,但是如果你想调用别人的应用程序(例如:你写了一个游戏管理的软件,需要管理很多游戏,但是游戏不是你写的,你是得不到入口activity的,你怎么办?),解决办法如下: 通过PackageManager可以得到PackageInfo,通过PackageInfo就可以得到你手机上安装的应用的包名(这个很简单,网上有的是,不赘述)。关键是下一步,代码如下(也是a应用中Button的onclick中的代码): PackageManager packageManager = Start_RemoveSoftActivity.this.getPackageManager(); Intent intent=new Intent(); try { intent =packageManager.getLaunchIntentForPackage("要调用应用的包名"); } catch (NameNotFoundException e) { Log.i(TAG, e.toString()); } startActivity(intent); 其中,"要调用应用的包名"为通过PackageInfo得到的想要启动的应用的包名。这样,我们就可以不知道别人应用源码的情况下,也可以调用别人 通过PackageManager可以得到PackageInfo,然后是能得到一些Activity的包名但是问题来了,在这些包名集合中,你怎么得到一个未知包名的Activity 的包名? 要调用另外一个APK其实很简单,你首先从网上获取的反编译软件反编译一下你的那个apk文件。查看它的AndroidManifest.xml文件,可以获取包名和你要跳转到的某个activity名,例如:package="com.hmg.turntest"<activity android:name=".turnPic" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>获取后,可以这样跳转: Intent intent = new Intent(); intent.setClassName("com.hmg.turntest","com.hmg.turntest.turnPic"); startActivity(intent); 貌似不错,标注下。使用aidl~ 想问六楼Start_RemoveSoftActivity是你activity的类名吗?为啥我使用this.不行呢? 根本就不是,手机里的照相机都是com.android.camera,你试试:startActivity(getPackageManager().getLaunchIntentForPackage("com.android.camera")); 看怎么样,根本就不是这样.想都不用想, getLaunchIntentForPackage()会查哪一个activity的intent? 如果那个APK中有好几个activity的intent都一样都是LAUNCHER+MAIN呢? 怎么可能一个应用中有好几个activity的intent都一样都是LAUNCHER+MAIN呢?根本不可能哇!就像你一个C程序中可能有好几个main函数么?那系统到底先运行哪个?所以不可能的啦~ 这样好像只能调用安装后的apk. 大哥们,下个android系统的源码不就知道包名了吗???去下吧,也就几个G而已。 不知道怎么用AIDL,但是知道六楼的思想.. 如果想运行包名下的不是主Activity,是其他的Acvity的怎么办啊 PackageManager pm = getPackageManager();PackageInfo info =pm.getPackageArchiveInfo(archiveFilePath,PackageManager.GET_ACTIVITIES);if(info != null){ApplicationInfo appInfo = info.applicationInfo;String appName = pm.getApplicationLabel(appInfo).toString();}只要给出apk路径就能拿包名了 Android新手源代码编译出问题!!请教高手,, 各位大师,冰天雪地裸体跪求一个网站移动应用的示例 Android事件监听变量值传递问题,求解答 Android 播放网络 H264 Streaming 为什么ArrayList的add函数不仅增加一个数据,还把先前加的记录都改为和新加的数据? android擦除动画如何实现 alertDialog.build的setMultiChoiceItems方法如何得到多选的值 从服务器大批量下载图片 关于android模拟器IP问题? 申请API,为啥会这样子啊 android程序如何实现左侧导航栏 开发到andriod程序能放到百度的云平台上吗
这也是一个初学者给我提供的办法,很简单就解决了。
这种方法对于调用我们自己写的应用程序没有问题,但是如果你想调用别人的应用程序(例如:你写了一个游戏管理的软件,需要管理很多游戏,但是游戏不是你写的,你是得不到入口activity的,你怎么办?),解决办法如下:
通过PackageManager可以得到PackageInfo,通过PackageInfo就可以得到你手机上安装的应用的包名(这个很简单,网上有的是,不赘述)。关键是下一步,代码如下(也是a应用中Button的onclick中的代码):
PackageManager packageManager = Start_RemoveSoftActivity.this.getPackageManager();
Intent intent=new Intent();
try {
intent =packageManager.getLaunchIntentForPackage("要调用应用的包名");
} catch (NameNotFoundException e) {
Log.i(TAG, e.toString());
}
startActivity(intent);
其中,"要调用应用的包名"为通过PackageInfo得到的想要启动的应用的包名。这样,我们就可以不知道别人应用源码的情况下,也可以调用别人
package="com.hmg.turntest"
<activity android:name=".turnPic" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
获取后,可以这样跳转:
Intent intent = new Intent();
intent.setClassName("com.hmg.turntest","com.hmg.turntest.turnPic"); startActivity(intent);
startActivity(getPackageManager().getLaunchIntentForPackage("com.android.camera")); 看怎么样,根本就不是这样.想都不用想, getLaunchIntentForPackage()会查哪一个activity的intent? 如果那个APK中有好几个activity的intent都一样都是LAUNCHER+MAIN呢?
怎么可能一个应用中有好几个activity的intent都一样都是LAUNCHER+MAIN呢?根本不可能哇!就像你一个C程序中可能有好几个main函数么?那系统到底先运行哪个?所以不可能的啦~
PackageInfo info =pm.getPackageArchiveInfo(archiveFilePath,PackageManager.GET_ACTIVITIES);
if(info != null){
ApplicationInfo appInfo = info.applicationInfo;
String appName = pm.getApplicationLabel(appInfo).toString();
}
只要给出apk路径就能拿包名了