如何启动另外一个应用的任意Activity
来源:互联网 发布:linux 没有nslookup 编辑:程序博客网 时间:2024/04/30 13:54
举个栗子我要启动91通讯录的拨号界面,首先我们获取91的包名,可以打印,也可以通过代码调出来,或者直接反编译
ComponentName componentName = new ComponentName("com.nd.desktopcontacts", //91通讯录包名"com.nd.desktopcontacts.MainActivity"); //91通讯录的Activity名字Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setComponent(componentName);intent.setAction("");startActivity(intent);finish();
可以发现确实启动了91通讯录,但是我们要默认进入其他界面,则需要反编译apk查看具体的配置文件
包名也通过打印Log获取,最直接的办法是使用apktool 反编译apk. AndroidManifest.xml,直接查看包名,Activity,如我反编译91通讯录可以看到如下
拨号的Activity名字是
<activity-alias android:label="@string/shortcut_contact" android:icon="@drawable/ic_launcher_shortcut_contact" android:name="com.nd.desktopcontacts.tmpcontacts" android:targetActivity="com.nd.desktopcontacts.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/shortcut_mms" android:icon="@drawable/ic_launcher_shortcut_sms" android:name="com.nd.desktopcontacts.tmpmms" android:targetActivity="com.nd.desktopcontacts.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/shortcut_dial" android:icon="@drawable/ic_launcher_shortcut_dial" android:name="com.nd.desktopcontacts.tmpphone" android:targetActivity="com.nd.desktopcontacts.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity-alias>
通过label判断是那个是拨号
com.nd.desktopcontacts.tmpphone
好我们吧靶Acitivity改为这个
改了跳转发现报错,可以判断对方Activity要接受ation,或者一些data信息,否则直接跳转报错,可以继续反编译classes.dex, 查看对方Activity需要哪些data,
private void initTabFlag(Intent paramIntent) { if (paramIntent == null) {} label259: label391: for (;;) { return; int i = paramIntent.getIntExtra("tabflag", -1); if (i != -1) { this.tabFlag = i; } String str = paramIntent.getAction(); if (str != null) { if (str.equals("android.intent.action.DIAL")) { this.tabFlag = 0; } if (str.equals("android.intent.action.VIEW")) { if (paramIntent.getData() == null) { break label259; } if ((paramIntent.getDataString().equals("content://com.android.contacts/contacts")) || (paramIntent.getDataString().equals("content"))) { this.tabFlag = 1; } if ((paramIntent.getData().getScheme() != null) && (paramIntent.getData().getScheme().equals("tel"))) { this.tabFlag = 0; } } if (str.equals("android.intent.action.MAIN")) { if (paramIntent.getData() == null) { break label321; } Log.e("MainActivity", "intent_data!=null:" + paramIntent.getData()); if ((!paramIntent.getDataString().equals("content://mms-sms/")) && (!paramIntent.getDataString().equals("content"))) { break label271; } this.tabFlag = 2; } } for (;;) { if (((!"android.intent.action.VIEW".equals(paramIntent.getAction())) || (!"vnd.android.cursor.dir/calls".equals(paramIntent.getType()))) && (!"com.android.phone.action.RECENT_CALLS".equals(paramIntent.getAction())) && (!"com.sec.android.app.dialertab.calllog.DetailViewActivity".equals(paramIntent.getAction()))) { break label391; } this.tabFlag = 0; return; Log.e("MainActivity", "intent_data==null"); break; label271: if ((paramIntent.getExtras() != null) && (Integer.valueOf(getIntent().getExtras().getInt("tab_contact_flag")) != null)) { this.tabFlag = Integer.valueOf(getIntent().getExtras().getInt("tab_contact_flag")).intValue(); continue; label321: if ((paramIntent.getType() != null) && (paramIntent.getType().equals("vnd.android-dir/mms-sms"))) { this.tabFlag = 2; } else if ((paramIntent.getExtras() != null) && (Integer.valueOf(paramIntent.getExtras().getInt("tab_contact_flag")) != null)) { this.tabFlag = Integer.valueOf(paramIntent.getExtras().getInt("tab_contact_flag")).intValue(); } } } } }
Intent localIntent1 = new Intent(); localIntent1.setClassName("com.nd.desktopcontacts", "com.nd.desktopcontacts.tmpphone"); localIntent1.setAction("android.intent.action.MAIN"); localIntent1.putExtra("tab_contact_flag", 0);// Intent localIntent2 = new Intent();// localIntent2.putExtra("android.intent.extra.shortcut.INTENT", localIntent1);// localIntent2.putExtra("android.intent.extra.shortcut.NAME", getString(R.string.hello_world));// localIntent2.putExtra("android.intent.extra.shortcut.ICON_RESOURCE", Intent.ShortcutIconResource.fromContext(this, R.string.hello_world));// setResult(-1, localIntent2); // localIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(localIntent1); finish();
总结
跨应用启动Acitivity,ManiAcitivity一般是可以启动的,但到启动应用的其他Acitivty,就需要看看靶Acitivity是否需要一些信息,如果需要则需反编译调查需要什么
Demo下载 运行Demo,在安装91通讯录2.3.4,下载里有91的反编译xml和 代码jar,
0 0
- 如何启动另外一个应用的任意Activity
- 启动另外一个Activity
- 启动另外一个Activity
- 如何从一个activity启动另外一个activity Android Eclipse
- 如何从一个Activity启动另外一个Activity
- 启动另外的一个应用程序的Activity
- android 启动另外一个程序的Activity
- Android 打开另外一个应用的activity
- Android应用开发学习笔记之启动另外一个Activity
- 创建你的第一个安卓应用4 - 第四课 - 启动另外一个activity
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- Android 在一个应用中如何启动另外一个已安装的应用
- Android 在一个应用中如何启动另外一个已安装的应用
- Android 在一个应用中如何启动另外一个已安装的应用
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- 自定义导航栏,系统导航栏一堆bug
- 别人家的设计不一定适合你!移动端设计模式的误用
- Swift 基本运算符(笔记)
- Redis入门之redis 连接以及 对字符的操作
- android-async-http AsyncHttpClient介绍
- 如何启动另外一个应用的任意Activity
- 美联储加息落地 题材股继续活跃创业板大涨1.85%
- Wing IDE for Linux 的安装和破解
- 测试1217
- SingleThreadExecutor的使用
- TinyReplaySystem回放系统设计和开发
- Synchronized与三种锁态
- defaults
- iOS开发 -- SVN的使用