Android调用另一个App界面
2016-01-25 19:03
483 查看
最近年底了,项目比较忙,虽然用笔把要总结的技巧来技术写下了,但是一直没有时间来更新。今天要说的是在App中调用其他APP界面的总结,我们经常需要给别的程序调用自己程序的UI界面,这时可以有三种方式来提供调用。
1、使用隐匿intent的方式调用,这种方式是比较推荐的,也比较简单
首先在自己应用的Mainifest.xml中加入如下代码:
这里的“com.mhwang.CallActivity ”就是提供的activity的包名及位置,
就是对方要调用你的界面所提供的动作,当然事先得告诉对方。然后对方才可以在他那边调用。
调用代码如下所示:
当调用出错时或者没有安装该APP时,会报出提示。
2、利用ComponentName方式,这种方式不用提供者刻意在MainFest.xml中修改activity属性,调用者只要知道提供者的包名和Activity名就可以了。
这里要注意,ComponentName name = new ComponentName(“com.mhwang.test”
,”com.mhwang.test.CallActivity”);前面的字符串是包名,后面的完整路径名,后面不可省略掉包名,写成CallActivity是不行的。
3、使用广播形式,这种方法要求在被调用的APP中,编写一个广播接收器来启动Activity。
需要注意的是,i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);不可以漏掉,不然启动不了,因为context.startActivity与我们平时的直接startActivity是不一样的,具体区别可以查阅资料,所以在广播中调用Activity时,需要加上i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 还有,不要忘记注册静态广播。
最后,调用都需要调用的时候只要发送一个广播就可以了。
1、使用隐匿intent的方式调用,这种方式是比较推荐的,也比较简单
首先在自己应用的Mainifest.xml中加入如下代码:
<activity android:name="com.mhwang.test.CallActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.mhwang.CALL"/> <category android:name="ANDROID.INTENT.CATEGORY.DEFAULT"></category> </intent-filter> </activity>
这里的“com.mhwang.CallActivity ”就是提供的activity的包名及位置,
就是对方要调用你的界面所提供的动作,当然事先得告诉对方。然后对方才可以在他那边调用。
调用代码如下所示:
Intent intent = new Intent(); intent.setAction("android.intent.mhwang.CALL"); startActivity(intent); }catch (Exception e){ Toast.makeText(this,"请先安装该app",Toast.LENGTH_SHORT).show(); }
当调用出错时或者没有安装该APP时,会报出提示。
2、利用ComponentName方式,这种方式不用提供者刻意在MainFest.xml中修改activity属性,调用者只要知道提供者的包名和Activity名就可以了。
Intent intent = new Intent(); ComponentName name = new ComponentName("com.mhwang.test" ,"com.mhwang.test.CallActivity"); intent.setComponent(name); startActivity(intent); }catch (Exception e){ Toast.makeText(this,"请先安装该app",Toast.LENGTH_SHORT).show(); }
这里要注意,ComponentName name = new ComponentName(“com.mhwang.test”
,”com.mhwang.test.CallActivity”);前面的字符串是包名,后面的完整路径名,后面不可省略掉包名,写成CallActivity是不行的。
3、使用广播形式,这种方法要求在被调用的APP中,编写一个广播接收器来启动Activity。
public class CallReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.mhwang.CALL")){ Intent i = new Intent(context,CallActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } }
需要注意的是,i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);不可以漏掉,不然启动不了,因为context.startActivity与我们平时的直接startActivity是不一样的,具体区别可以查阅资料,所以在广播中调用Activity时,需要加上i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 还有,不要忘记注册静态广播。
最后,调用都需要调用的时候只要发送一个广播就可以了。
Intent intent = new Intent("android.intent.mhwang.CALL"); sendBrocadcast(Intent);
相关文章推荐
- Understanding Android Security(安卓安全的理解)
- Understanding Android Security(安卓安全的理解)
- Understanding Android Security(安卓安全的理解)
- Understanding Android Security(安卓安全的理解)
- iOS 常用的宏定义
- android lint的使用
- iOS-如何以正确的姿势要求用用去App store评分
- Android 判断ListView是否在滚动到底部
- iOS-提交App store 中如何写好App描述?
- Android 设计模式之(三)观察者,适配器,桥接,组合模式
- Android 设计模式之(二)建造者,模板方法,策略模式
- Android 设计模式之(一)单例,代理,外观模式
- 安卓初学二之控件初步(一)
- @dynamic 模拟NSManagedObject类的内部实现,AFN的非常规用法
- 蜗牛爱课 - iOS7、8模态半透明弹出框
- Android开发中,有哪些让你觉得相见恨晚的方法、类或接口?
- 最新Android版本和API Level关系
- 用Python新建一个cocos2dx2.2的工程
- Unity-官方教程-SpaceShooter-个人开发笔记
- iOS开发系列--通知与消息机制