请教两个关于调用其他应用程序的问题

leetow2006 2018-12-11 07:34:40
在安卓中,在同一个项目中,一个Activity可以通过Intent调用另一个Activity,
甚至还可以通过系统内置的Intent调用系统的应用程序,比如打电话、打开浏览器、
发短信等。现在我有两个问题:
1、我想能否在一个项目中调用另一个项目中的Activity?如果可以,怎么做?
2、能否其他手机中的其他App,比如调用微信、QQ、百度地图等?如果可以,怎么做?
...全文
221 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2018-12-27
  • 打赏
  • 举报
回复
引用 10 楼 leetow2006 的回复:
还有个问题请教下: Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.tencent.mm"); 就不是活动微信的Intent,应该可以直接startActivity(LaunchIntent); 为什么还要下面的代码: if (LaunchIntent != null) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setComponent(LaunchIntent.getComponent()); startActivity(intent); 这些代码是干什么的?能否详细解释下?
FLAG_ACTIVITY_NEW_TASK这个必须有,否则会导致打不开其他应用。 ACTION_MAIN和CATEGORY_LAUNCHER是打开app的主页面。当然如果你知道是微信可以不要这两个,可以直接用LaunchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(LaunchIntent);
leetow2006 2018-12-11
  • 打赏
  • 举报
回复
请问:用什么软件可以反编译?
jklwan 2018-12-11
  • 打赏
  • 举报
回复
1、直接打开另外一个APP的指定activity页面,参考https://blog.csdn.net/u013148287/article/details/74528539,前提是需要设置android:exported="true" 。另外可以给app设置scheme,然后app内处理跳转,这种方式比较灵活,主要用于打开app内的各种页面,获取scheme的收到的数据来进行各种页面的跳转,各大app的网页跳转到app的指定页面都是这么做的。 2、打开手机的app可以用包名直接跳转,例如微信的包名是com.tencent.mm,打开微信就是

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.tencent.mm");
        if (LaunchIntent != null) {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setComponent(LaunchIntent.getComponent());
            startActivity(intent);
        }
当然一般跳转都是通过scheme,可以跳转到指定页面,例如跳转到淘宝订单页

Intent taobao = new Intent("android.intent.action.VIEW");
taobao.setData(Uri.parse("taobao://taobao.trade.order/orderlist.htm"));
startActivity(taobao);
这些scheme可以通过反编译查看AndroidManifest文件。当然软件如果没安装的话会崩溃,需要异常处理。
leetow2006 2018-12-11
  • 打赏
  • 举报
回复
还有个问题请教下:
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.tencent.mm");
就不是活动微信的Intent,应该可以直接startActivity(LaunchIntent);
为什么还要下面的代码:
if (LaunchIntent != null) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(LaunchIntent.getComponent());
startActivity(intent);
这些代码是干什么的?能否详细解释下?
jklwan 2018-12-11
  • 打赏
  • 举报
回复
引用 8 楼 leetow2006 的回复:
另外可以给app设置scheme,然后app内处理跳转,这种方式比较灵活,主要用于打开app内的各种页面,获取scheme的收到的数据来进行各种页面的跳转,各大app的网页跳转到app的指定页面都是这么做的。 ======================= 请问:给app设置scheme,然后app内处理跳转,能不能举个例子,这样说得比较抽象,如果有例子, 可能就比较容易理解。
直接搜一下就会有很多的例子了http://www.cnblogs.com/whoislcj/p/5825333.html
leetow2006 2018-12-11
  • 打赏
  • 举报
回复
另外可以给app设置scheme,然后app内处理跳转,这种方式比较灵活,主要用于打开app内的各种页面,获取scheme的收到的数据来进行各种页面的跳转,各大app的网页跳转到app的指定页面都是这么做的。
=======================
请问:给app设置scheme,然后app内处理跳转,能不能举个例子,这样说得比较抽象,如果有例子,
可能就比较容易理解。
jklwan 2018-12-11
  • 打赏
  • 举报
回复
引用 6 楼 leetow2006 的回复:
ava.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bycallactivity/com.example.bycallactivity.MainActivity}: java.lang.NullPointerException: println needs a message 请问:该怎么解决?
println needs a message Log.d("ByCall", str1);日志的问题,第一打开app是没有参数的,肯定取不到值导致str1是null,所以日志报错。判断一下空就行了,或者改成 Log.d("ByCall", "receive:"+str1);
leetow2006 2018-12-11
  • 打赏
  • 举报
回复
我在被调用的Activity中,接受传递过来的参数:
protected void onCreate(Bundle savedInstanceState) {
......
String str1 ="";
String str2 ="";
String str3 ="";
Intent in=getIntent();
str1 =in.getStringExtra("str1");
str2 =in.getStringExtra("str2");
str3 =in.getStringExtra("str3");

Log.d("ByCall", str1);
Log.d("ByCall", str2);
Log.d("ByCall", str3);
}
调用的Activity中传递参数:
Intent intent=new Intent();
intent.setClassName("com.example.bycallactivity", "com.example.bycallactivity.MainActivity");
intent.putExtra("str1", "Value1");
intent.putExtra("str2", "Value2");
intent.putExtra("str3", "Value3");
startActivity(intent);
可是在被调用的工程(上面那个工程)编译时就出错了,
ava.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bycallactivity/com.example.bycallactivity.MainActivity}: java.lang.NullPointerException: println needs a message
请问:该怎么解决?
jklwan 2018-12-11
  • 打赏
  • 举报
回复
引用 4 楼 leetow2006 的回复:
Intent intent=new Intent(); intent.setClassName("com.example.callactivity", "com.example.bycallactivity.MainActivity"); 这样不能,会出错。 因为是两个工程,一个是在目录:ByCallActivity\src下的com.example.bycallactivity.MainActivity, 一个是在目录:CallActivity\src下的com.example.callactivity, 请问:该怎么做?(我有把ByCallActivity导出)
https://blog.csdn.net/u013148287/article/details/74528539认真看这个例子 ,你要B打开C就写C的包名和Activity的全路径。 你要C打开B就写B的包名和Activity全路径。
leetow2006 2018-12-11
  • 打赏
  • 举报
回复
Intent intent=new Intent();
intent.setClassName("com.example.callactivity", "com.example.bycallactivity.MainActivity");
这样不能,会出错。
因为是两个工程,一个是在目录:ByCallActivity\src下的com.example.bycallactivity.MainActivity,
一个是在目录:CallActivity\src下的com.example.callactivity,
请问:该怎么做?(我有把ByCallActivity导出)
jklwan 2018-12-11
  • 打赏
  • 举报
回复
引用 2 楼 leetow2006 的回复:
请问:用什么软件可以反编译?
https://download.csdn.net/download/jklwan/10694836可以直接打开apk文件

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧