Android平台下APP唤醒机制

一、目标

   在Android平台下的一个APP中,打开(唤醒)另一个APP。

二、前提

1.主动唤醒方的APP与被唤醒方的APP之间有唯一的标识作为唤醒的通信信号。

2.主动唤醒方的APP的开发者需要准确知晓该标识,并采用代码实现唤醒通信机制。

三、技术方案

       以APPA唤醒APP B为例,以下方案的每个步骤都需要所参与的APP的开发者编码实现。

  • 方案一:

1.将APPB中的某个界面添加特定标记TAG;

2.APP A通过TAG唤醒指定的APP B的界面。

示意图如下:


  • 方案二:

1.在APPA中发出TAG广播;

2.在被唤醒的APPB中接收TAG广播,即可唤醒APP B。

示意图如下:


四、代码实现

方案一可以使用以下1、2两种方法实现,方案二可以使用以下方法3实现。(部分转载

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();
}
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); 

      转载请注明出处:http://blog.csdn.net/daijin888888/article/details/53129884



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值