一种通知对应App的调起方法及装置与流程

文档序号:12664613阅读:386来源:国知局
一种通知对应App的调起方法及装置与流程

本发明涉及智能终端领域,具体而言,本发明涉及一种通知对应App的调起方法及装置。



背景技术:

目前手机等移动终端中设有消息通知栏,可以显示各个App通知的新闻、更新提示等等。目前由于App的种类繁多,通知栏内的消息显得繁琐杂乱。

例如,申请号为201410738416.3的中国发明专利申请,涉及一种通知消息显示方法及装置,用于终端设备,其中的方法包括:接收通知消息;根据预设分类规则对所述通知消息进行分类;按照所述分类在通知栏中对所述通知消息进行显示。在本公开实施例中,当手机等终端设备接收到系统或各APP的通知消息后,会根据预设分类规则对所述通知消息进行分类,例如将同一来源的分为一类,然后再按照所述分类在通知栏中对所述通知消息进行显示。这样就使得通知栏界面简洁而不杂乱,用户可以迅速找到关注的消息,提高了用户的阅读速度,提升了终端设备的操作效率,也优化了用户体验。

然而在很多型号的手机中,直接点击通知栏中的某项消息通知是无法直接调起该消息通知所在的App的,从而也无法直接调起该消息通知的详细信息,需要重新回到手机桌面去点击对应的App才能调起该App并查看消息。如此,使得手机用户的使用体验性较差,也会耗费用户宝贵的时间。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的通知对应App的调起方法及装置。

依据本发明的一个方面,提供了一种通知对应App的调起方法,包括如下步骤:

(1)接收调用通知对应App的请求;

(2)判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件,否则进入步骤(3);

(3)通过Intent调用Broadcast Receiver组件;

(4)Broadcast Receiver组件调用Shell命令;

(5)Shell命令调用所述App的Activity组件,从而调起所述App。

优选的,如上所述的通知对应App的调起方法,调用所述BroadcastReceiver组件的命令预先存储在Intent中。

优选的,如上所述的通知对应App的调起方法,Broadcast Receiver组件通过执行函数调用Shell命令。

优选的,如上所述的通知对应App的调起方法,Shell命令通过可执行程序直接调用所述App的Activity组件。

更优选的,如上所述的通知对应App的调起方法,所述可执行程序为am start activity。

根据本发明的另一个方面,还提供了一种通知对应App的调起方法,包括如下步骤:

(1)接收调用通知对应App的请求;

(2)判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件,否则进入步骤(3);

(3)通过Intent调用Service组件;

(4)Service组件调用Shell命令;

(5)Shell命令调用所述App的Activity组件,从而调起所述App。

优选的,如上所述的通知对应App的调起方法,调用所述Service组件的命令预先存储在Intent中。

优选的,如上所述的通知对应App的调起方法,Service组件通过执行函数调用Shell命令。

优选的,如上所述的通知对应App的调起方法,Shell命令通过可执行程序直接调用所述App的Activity组件。

优选的,如上所述的通知对应App的调起方法,所述可执行程序为am start activity。

根据本发明的再一个方面,还提供了一种通知对应App的调起装置,所述装置包括如下模块:

接收模块,用于接收调用通知对应App的请求;

判断模块,用于判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件;

广播调用模块,用于通过Intent调用Broadcast Receiver组件;

壳调用模块,用于通过Broadcast Receiver组件调用Shell命令;

应用程序调起模块,用于通过Shell命令调用所述App的Activity组件,从而调起所述App。

优选的,如上所述的通知对应App的调起装置,调用所述BroadcastReceiver组件的命令预先存储在Intent中。

优选的,如上所述的通知对应App的调起装置,Broadcast Receiver组件通过执行函数调用Shell命令。

优选的,如上所述的通知对应App的调起装置,Shell命令通过可执行程序直接调用所述App的Activity组件。

更优选的,如上所述的通知对应App的调起装置,所述可执行程序为am start activity。

根据本发明的另一个方面,还提供了一种通知对应App的调起装置,所述装置包括如下模块:

接收模块,用于接收调用通知对应App的请求;

判断模块,用于判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件;

服务调用模块,用于通过Intent调用Service组件;

壳调用模块,用于通过Service组件调用Shell命令;

应用程序调起模块,用于通过Shell命令调用所述App的Activity组件,从而调起所述App。

优选的,如上所述的通知对应App的调起装置,调用所述Service组件的命令预先存储在Intent中。

优选的,如上所述的通知对应App的调起装置,Service组件通过执行函数调用Shell命令。

优选的,如上所述的通知对应App的调起装置,Shell命令通过可执行程序直接调用所述App的Activity组件。

更优选的,如上所述的通知对应App的调起装置,所述可执行程序为am start activity。

本发明的有益效果如下:本发明能够在直接点击消息通知栏中的消息通知时,克服不能直接调起的情形,从而使用户可以迅速打开想了解的消息通知,获得良好的用户体验同时也节省了用户操作时间。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的一种通知对应App的调起方法的流程示意图;

图2示出了根据本发明一个实施例的另一种通知对应App的调起方法的流程示意图;

图3示出了根据本发明一个实施例的一种通知对应App的调起的装置的结构示意图;

图4示出了根据本发明一个实施例的另一种通知对应App的调起的装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

下面首先介绍本发明中所使用到的安卓组件及其组件之间的沟通机制的工作原理:

安卓四大组件分别为activity、service、content provider、broadcast receiver。

一、android四大组件:

1、activity

(1)一个Activity通常就是一个单独的屏幕(窗口)。

(2)Activity之间通过Intent进行通信。

(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

Activity显示的内容可以分为两种声明方式,第一种是通过xml配置文件来声明,第二种则是将某一继承自view类的对象。

(1)通过xml配置文件声明

Activity的配置文件位于res/layout文件夹中,一个配置文件相当于一个view容器,其中可以添加android平台内置的view如TextView,ImageView等,也可以添加继承自view类的子类对象。

(2)通过view子类声明

通过xml文件将不同的view整合到一起很方便,但是留给开发人员的自主性不够。这种情况下会通过扩展view子类来开发自己想要的界面。

例如给某一activity声明界面:

MyViewmyView=newMyView(this);

setContentView(myView);

2、service

(1)service用于在后台完成用户指定的操作。service分为两种:

(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。

(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

(2)startService()与bindService()区别:

(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。

(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

(3)开发人员需要在应用程序配置文件中声明全部的service,使用<service></service>标签。

(4)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

与activity不同,service组件没有提供与用户交互的界面,service是运行在后台的一种android组件,当应用程序需要进行某种不需要前台显示的计算或者数据处理时,就可以启动一个service。

Service一般由activity或者其他context对象来启动。当启动service之后,即使启动它的组件生命周期已经结束,但该service仍然会继续运行,直到自己的生命周期结束。

每个service都应该在AndroidMainFest.xml中声明,service的启动方式有两种,对应生命周期也有不同。

(1)通过startService方式启动,当系统调用startService方法时,如果该service还未启动,则依次调用其onCreate方法和onStart方法。当其他context对象调用stopService方法或service调用自身的stopSelf或stopService方法时才会停止。

2)通过bindService方法启动,当系统调用bindService方法时,如果该service还未启动,则会调用其onCreate方法,然后会将该Service和context对象(如actitity)进行绑定,当绑定的context对象销毁时,与之绑定的service也停止运行。

需要注意的是,不管以哪种方式启动,都可以将其与context对象绑定。

3、content provider(内容提供者)

(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

(2)只有需要在多个应用程序间共享数据时才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。

(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同传统的应用程序间共享数据的方式。

(4)开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。

(5)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

4、broadcast receiver(广播接收器)

(1)应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或service来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。

(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说,只要广播组件未禁用,哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

Broadcast Receiver组件和Service组件一样,不提供与用户的交互层。其是一种负责接收广播消息并对消息做出反应的组件。在android系统中有很多广播,如电量不足等。

应用程序如果需要相应某一广播消息,应该注册对应的broadcastReceiver对象,该对象继承自BroadCastReceiver类。当系统或者其他应用发出特定广播时,该程序就会接受并做出反应,如启动activity等。

(1)broadcastReciever发布一个广播

在需要的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来,通过调用context.sendBroadcast方法将该Intent对象广播出去、或者Context.sendStickBroadcast方法将该Intent对象广播出去。

(2)BroadCastReceiver接收一个广播

发布的广播实体是Intent,那么接收时候需要通过intentFilter对象来进行过滤。Broadcast Receiver的生命周期比较简单,只有一个回调方法,onReceive,该方法在接收到广播时调用。

注册BroadcastReceiver的方式

(1)在androidMainfest.xml中。注册信息包含在<receiver></receiver>中,并在<intent-filter>中设定过滤规则。

(2)在代码中创建并设置IntentFilter对象,该IntentFilter对象包含了对广播的过滤规则,然后在需要的地方调用Context.registerReceiver方法进行注册和取消注册,这种方式在context销毁后braodcast也就不存在了。

二、android四大组件特点:

(1)4大组件的注册

4大基本组件都需要注册才能使用,每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置。AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。而broadcast receiver广播接收者的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。需要注意的是在AndroidManifest文件中进行配置的广播接收者会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发(即使程序未运行)。

(2)4大组件的激活

内容提供者的激活:当接收到ContentResolver发出的请求后,内容提供者被激活。而其它三种组件activity、服务和广播接收器被一种叫做intent的异步消息所激活。

(3)4大组件的关闭

内容提供者仅在响应ContentResolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。Activity关闭:可以通过调用它的finish()方法来关闭一个activity。服务关闭:对于通过startService()方法启动的服务要调用Context.stopService()方法关闭服务,使用bindService()方法启动的服务要调用Context.unbindService()方法关闭服务。

(4)android中的任务(activity栈)

(a)任务其实就是activity的栈,它由一个或多个Activity组成,共同完成一个完整的用户体验。栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity启动另外一个的时候,新的activity就被压入栈,并成为当前运行的activity。而前一个activity仍保持在栈之中。当用户按下BACK键的时候,当前activity出栈,而前一个恢复为当前运行的activity。栈中保存的其实是对象,栈中的Activity永远不会重排,只会压入或弹出。

(b)任务中的所有activity是作为一个整体进行移动的。整个的任务(即activity栈)可以移到前台,或退至后台。

(c)Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。为了解决这个问题,Android引入了一个新的机制,即生命周期(LifeCycle)。

三.Intent机制

Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。

四.Intent启动组件的方法

通过Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。具体方法如下:

五.Intent的属性

Intent有以下几个属性:

动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。

在这些组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)。为了实现这个目的,listActivity需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity(Intentintent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。

实施例

图1示出了根据本发明一个实施例的一种通知对应App的调起方法的流程示意图;如图1所示,依据本发明的一个方面,提供了一种通知对应App的调起方法,包括如下步骤:

S110、接收调用通知对应App的请求。这个步骤往往是在用户点击通知栏中的图标时实现的。当用户点击通知栏中的某个消息通知时,相当于发出了调用通知对应的App的请求。

S120、判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件,否则进入步骤S130;这种调用也是通过Intent来实现的。那么如何启动一个Activity呢?这个过程包含三个步骤:

1.生成一个意图对象(也就是Intent);

2.调用Intent对象的SetClass方法;

3.调用当前Activity继承类中的startActivity的方法。

Activity是Android应用中,最直接与用户接触的组件,它负责加载View组件,使其展现给用户,并保持与用户的交互。所有的Activity组件均需要继承Activity类,这是一个Content的间接子类,包装了一些Activity的基本特性。

View组件是所有UI组件、容器组件的基类,也就是说,它可以是一个布局容器,也可以是一个布局容器内的基本UI组件。View组件一般通过XML布局资源文件定义,同时Android系统也对这些View组件提供了对应的实现类。如果需要通过某个Activity把指定的View组件显示出来,调用Activity的setContentView()方法即可,它具有多个重载方法,可以传递一个XML资源ID或者View对象。

Activity为Android应用提供了一个用户界面,当一个Activity被开启之后,它具有自己的生命周期。Activity类也对这些生命周期提供了对应的方法,如果需要对Activity各个不同的生命周期做出响应,可以重写这些生命周期方法实现。对于大多数商业应用而言,整个系统中包含了多个Activity,在应用中逐步导航跳转开启这些Activity之后,会形成Activity的回退栈,当前显示并获得焦点的Activity位于这个回退栈的栈顶。

S130、通过Intent调用Broadcast Receiver组件;调用所述BroadcastReceiver组件的命令预先存储在Intent中。Intent调用Broadcast Receiver组件的过程如下:

1)创建需要启动BroadcastReceiver的Intent。

2)调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。其中sendBroadcast发送的是普通广播,sendOrderedBroadcast发送的是有序广播。

当应用发出一个Broadcast Intent之后所匹配该Intent的组件都可能被启动。

S140、Broadcast Receiver组件调用Shell命令;Broadcast Receiver组件通过执行函数调用Shell命令。

例如,在命令行中通过adb shell am broadcast发送广播通知。

adb shell am broadcast后面的参数有:

[-a<ACTION>]

[-d<DATA_URI>]

[-t<MIME_TYPE>]

[-c<CATEGORY>[-c<CATEGORY>]...]

[-e|--es<EXTRA_KEY><EXTRA_STRING_VALUE>...]

[--ez<EXTRA_KEY><EXTRA_BOOLEAN_VALUE>...]

[-e|--ei<EXTRA_KEY><EXTRA_INT_VALUE>...]

[-n<COMPONENT>]

[-f<FLAGS>][<URI>]

S150、Shell命令调用所述App的Activity组件,从而调起所述App。Shell命令通过可执行程序直接调用所述App的Activity组件。所述可执行程序为amstart activity。

启动的方法为:

adb shell

#am start -n{包(package)名}/{包名}.{活动(activity)名称}

程序的入口类可以从每个应用的AndroidManifest.xml的文件中得到,以计算器(calculator)为例,它的

<manifest

xmlns:android="http://schemas.android.com/apk/res/android"…

package="com.android.calculator2"…>…

由此计算器(calculator)的启动方法为:#am start -n com.android.calculator2/com.android.calculator2.Calculator。另外需要注意的是,若Android版本为4.2(或以上),则此处的启动方式需要做一点小变动,在其中增加--user0参数,即:#am start--user 0-n com.android.calculator2/com.android.calculator2.Calculator。

一般情况希望,一个Android应用对应一个工程。值得注意的是,有一些工程具有多个活动(activity),而有一些应用使用一个工程。例如:在Android界面中,Music和Video是两个应用,但是它们使用的都是packages/apps/Music这一个工程。而在这个工程的AndroidManifest.xml文件中,有包含了不同的活动(activity)。

图2示出了根据本发明一个实施例的另一种通知对应App的调起方法的流程示意图;如图2所示,一种通知对应App的调起方法,包括如下步骤:

S210、接收调用通知对应App的请求;这个步骤往往是在用户点击通知栏中的图标时实现的。当用户点击通知栏中的某个消息通知时,相当于发出了调用通知对应的App的请求。

S220、判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件,否则进入步骤(3);这种调用也是通过Intent来实现的。那么如何启动一个Activity呢?这个过程包含三个步骤:

1.生成一个意图对象(也就是Intent);

2.调用Intent对象的SetClass方法;

3.调用当前Activity继承类中的startActivity的方法。

Activity是Android应用中,最直接与用户接触的组件,它负责加载View组件,使其展现给用户,并保持与用户的交互。所有的Activity组件均需要继承Activity类,这是一个Context的间接子类,包装了一些Activity的基本特性。

View组件是所有UI组件、容器组件的基类,也就是说,它可以是一个布局容器,也可以是一个布局容器内的基本UI组件。View组件一般通过XML布局资源文件定义,同时Android系统也对这些View组件提供了对应的实现类。如果需要通过某个Activity把指定的View组件显示出来,调用Activity的setContentView()方法即可,它具有多个重载方法,可以传递一个XML资源ID或者View对象。

Activity为Android应用提供了一个用户界面,当一个Activity被开启之后,它具有自己的生命周期。Activity类也对这些生命周期提供了对应的方法,如果需要对Activity各个不同的生命周期做出响应,可以重写这些生命周期方法实现。对于大多数商业应用而言,整个系统中包含了多个Activity,在应用中逐步导航跳转开启这些Activity之后,会形成Activity的回退栈,当前显示并获得焦点的Activity位于这个回退栈的栈顶。

S230、通过Intent调用Service组件。具体方法如下:

通过传递一个Intent对象至Context.startService()将启动一个Service(或给予正在运行的服务以一个新的指令)。Android调用服务的onStart()方法并将Intent对象传递给它。

与此类似,一个Intent可以被调用组件传递给Context.bindService()以获取一个正在运行的目标服务的连接。这个服务会经由onBind()方法的调用获取这个Intent对象(如果服务尚未启动,bindService()会先启动它)。比如说,一个activity可以连接至前述的音乐回放服务,并提供给用户一个可操作的(用户界面)以对回放进行控制。这个activity可以调用bindService()来建立连接,然后调用服务中定义的对象来影响回放。

S240、Service组件调用Shell命令;Service组件通过执行函数调用Shell命令。

具体过程如下:

adb shell am startservice-n{包(package)名}/{包名}.{服务(service)名称}

比如启动自己应用中一个service:

adb shell am startservice

–ncom.android.traffic/com.android.traffic.maniservice。

S250、Shell命令调用所述App的Activity组件,从而调起所述App。Shell命令通过可执行程序直接调用所述App的Activity组件。所述可执行程序为am start activity。

启动的方法为:

adb shell

#am start-n{包(package)名}/{包名}.{活动(activity)名称}

程序的入口类可以从每个应用的AndroidManifest.xml的文件中得到,以计算器(calculator)为例,它的

<manifest

xmlns:android="http://schemas.android.com/apk/res/android"…

package="com.android.calculator2"…>…

由此计算器(calculator)的启动方法为:#am start -n com.android.calculator2/com.android.calculator2.Calculator

一般情况希望,一个Android应用对应一个工程。值得注意的是,有一些工程具有多个活动(activity),而有一些应用使用一个工程。例如:在Android界面中,Music和Video是两个应用,但是它们使用的都是packages/apps/Music这一个工程。而在这个工程的AndroidManifest.xml文件中,有包含了不同的活动(activity)。

图3示出了根据本发明一个实施例的一种通知对应App的调起的装置的结构示意图。如图3所示,一种通知对应App的调起的装置300,所述装置包括如下模块:

接收模块310,用于接收调用通知对应App的请求;这个请求往往是在用户点击通知栏中的图标时实现的。当用户点击通知栏中的某个消息通知时,相当于发出了调用通知对应的App的请求。

判断模块320,用于判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件;这种调用也是通过Intent来实现的。那么如何启动一个Activity呢?这个过程包含三个步骤:

1.生成一个意图对象(也就是Intent);

2.调用Intent对象的SetClass方法;

3.调用当前Activity继承类中的startActivity的方法。

Activity是Android应用中,最直接与用户接触的组件,它负责加载View组件,使其展现给用户,并保持与用户的交互。所有的Activity组件均需要继承Activity类,这是一个Content的间接子类,包装了一些Activity的基本特性。

View组件是所有UI组件、容器组件的基类,也就是说,它可以是一个布局容器,也可以是一个布局容器内的基本UI组件。View组件一般通过XML布局资源文件定义,同时Android系统也对这些View组件提供了对应的实现类。如果需要通过某个Activity把指定的View组件显示出来,调用Activity的setContentView()方法即可,它具有多个重载方法,可以传递一个XML资源ID或者View对象。

Activity为Android应用提供了一个用户界面,当一个Activity被开启之后,它具有自己的生命周期。Activity类也对这些生命周期提供了对应的方法,如果需要对Activity各个不同的生命周期做出响应,可以重写这些生命周期方法实现。对于大多数商业应用而言,整个系统中包含了多个Activity,在应用中逐步导航跳转开启这些Activity之后,会形成Activity的回退栈,当前显示并获得焦点的Activity位于这个回退栈的栈顶。

广播调用模块330,用于通过Intent调用Broadcast Receiver组件;调用所述BroadcastReceiver组件的命令预先存储在Intent中。Intent调用Broadcast Receiver组件的过程如下:

1)创建需要启动BroadcastReceiver的Intent。

2)调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadcastReceiver。其中sendBroadcast发送的是普通广播,sendOrderedBroadcast发送的是有序广播。

当应用发出一个Broadcast Intent之后所匹配该Intent的组件都可能被启动。

壳调用模块340,用于通过Broadcast Receiver组件调用Shell命令;Broadcast Receiver组件通过执行函数调用Shell命令。

例如,在命令行中通过adb shell am broadcast发送广播通知。

adb shell am broadcast后面的参数有:

[-a<ACTION>]

[-d<DATA_URI>]

[-t<MIME_TYPE>]

[-c<CATEGORY>[-c<CATEGORY>]...]

[-e|--es<EXTRA_KEY><EXTRA_STRING_VALUE>...]

[--ez<EXTRA_KEY><EXTRA_BOOLEAN_VALUE>...]

[-e|--ei<EXTRA_KEY><EXTRA_INT_VALUE>...]

[-n<COMPONENT>]

[-f<FLAGS>][<URI>]

应用程序调起模块350,用于通过Shell命令调用所述App的Activity组件,从而调起所述App。Shell命令通过可执行程序直接调用所述App的Activity组件。所述可执行程序为am start activity。

启动的方法为:

adb shell

#am start-n{包(package)名}/{包名}.{活动(activity)名称}

程序的入口类可以从每个应用的AndroidManifest.xml的文件中得到,以计算器(calculator)为例,它的

<manifest

xmlns:android="http://schemas.android.com/apk/res/android"…

package="com.android.calculator2"…>…

由此计算器(calculator)的启动方法为:#am start-n com.android.calculator2/com.android.calculator2.Calculator

一般情况希望,一个Android应用对应一个工程。值得注意的是,有一些工程具有多个活动(activity),而有一些应用使用一个工程。例如:在Android界面中,Music和Video是两个应用,但是它们使用的都是packages/apps/Music这一个工程。而在这个工程的AndroidManifest.xml文件中,有包含了不同的活动(activity)。

图4示出了根据本发明一个实施例的另一种通知对应App的调起的装置的结构示意图;如图4所示,一种通知对应App的调起的装置400,所述装置包括如下模块:

接收模块410,用于接收调用通知对应App的请求;这个请求往往是在用户点击通知栏中的图标时实现的。当用户点击通知栏中的某个消息通知时,相当于发出了调用通知对应的App的请求。

判断模块420,用于判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件;这种调用也是通过Intent来实现的。

那么如何启动一个Activity呢?这个过程包含三个步骤:

1.生成一个意图对象(也就是Intent);

2.调用Intent对象的SetClass方法;

3.调用当前Activity继承类中的startActivity的方法。

Activity是Android应用中,最直接与用户接触的组件,它负责加载View组件,使其展现给用户,并保持与用户的交互。所有的Activity组件均需要继承Activity类,这是一个Context的间接子类,包装了一些Activity的基本特性。

View组件是所有UI组件、容器组件的基类,也就是说,它可以是一个布局容器,也可以是一个布局容器内的基本UI组件。View组件一般通过XML布局资源文件定义,同时Android系统也对这些View组件提供了对应的实现类。如果需要通过某个Activity把指定的View组件显示出来,调用Activity的setContentView()方法即可,它具有多个重载方法,可以传递一个XML资源ID或者View对象。

Activity为Android应用提供了一个用户界面,当一个Activity被开启之后,它具有自己的生命周期。Activity类也对这些生命周期提供了对应的方法,如果需要对Activity各个不同的生命周期做出响应,可以重写这些生命周期方法实现。对于大多数商业应用而言,整个系统中包含了多个Activity,在应用中逐步导航跳转开启这些Activity之后,会形成Activity的回退栈,当前显示并获得焦点的Activity位于这个回退栈的栈顶。

服务调用模块430,用于通过Intent调用Service组件;具体方法如下:

通过传递一个Intent对象至Context.startService()将启动一个Service(或给予正在运行的服务以一个新的指令)。Android调用服务的onStart()方法并将Intent对象传递给它。

与此类似,一个Intent可以被调用组件传递给Context.bindService()以获取一个正在运行的目标服务的连接。这个服务会经由onBind()方法的调用获取这个Intent对象(如果服务尚未启动,bindService()会先启动它)。比如说,一个activity可以连接至前述的音乐回放服务,并提供给用户一个可操作的(用户界面)以对回放进行控制。这个activity可以调用bindService()来建立连接,然后调用服务中定义的对象来影响回放。

壳调用模块440,用于通过Service组件调用Shell命令;Service组件通过执行函数调用Shell命令。

具体过程如下:

adb shell am startservice-n{包(package)名}/{包名}.{服务(service)名称}

比如启动自己应用中一个service:

adb shell am startservice

–ncom.android.traffic/com.android.traffic.maniservice。

应用程序调起模块450,用于通过Shell命令调用所述App的Activity组件,从而调起所述App。Shell命令通过可执行程序直接调用所述App的Activity组件。所述可执行程序为am start activity。

启动的方法为:

adb shell

#am start-n{包(package)名}/{包名}.{活动(activity)名称}

程序的入口类可以从每个应用的AndroidManifest.xml的文件中得到,以计算器(calculator)为例,它的

<manifest

xmlns:android="http://schemas.android.com/apk/res/android"…

package="com.android.calculator2"…>…

由此计算器(calculator)的启动方法为:#am start-n com.android.calculator2/com.android.calculator2.Calculator。

一般情况希望,一个Android应用对应一个工程。值得注意的是,有一些工程具有多个活动(activity),而有一些应用使用一个工程。例如:在Android界面中,Music和Video是两个应用,但是它们使用的都是packages/apps/Music这一个工程。而在这个工程的AndroidManifest.xml文件中,有包含了不同的活动(activity)。

需要说明的是:

在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明的实施例公开了A1、一种通知对应App的调起方法,包括如下步骤:

(1)接收调用通知对应App的请求;

(2)判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件,否则进入步骤(3);

(3)通过Intent调用Broadcast Receiver组件;

(4)Broadcast Receiver组件调用Shell命令;

(5)Shell命令调用所述App的Activity组件,从而调起所述App。

A2、如A1所述的通知对应App的调起方法,调用所述BroadcastReceiver组件的命令预先存储在Intent中。

A3、如A1所述的通知对应App的调起方法,Broadcast Receiver组件通过执行函数调用Shell命令。

A4、如A1所述的通知对应App的调起方法,Shell命令通过可执行程序直接调用所述App的Activity组件。

A5、如A4所述的通知对应App的调起方法,所述可执行程序为amstart activity。

A6、一种通知对应App的调起方法,包括如下步骤:

(1)接收调用通知对应App的请求;

(2)判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件,否则进入步骤(3);

(3)通过Intent调用Service组件;

(4)Service组件调用Shell命令;

(5)Shell命令调用所述App的Activity组件,从而调起所述App。

A7、如A6所述的通知对应App的调起方法,调用所述Service组件的命令预先存储在Intent中。

A8、如A6所述的通知对应App的调起方法,Service组件通过执行函数调用Shell命令。

A9、如A6所述的通知对应App的调起方法,Shell命令通过可执行程序直接调用所述App的Activity组件。

A10、如A9所述的通知对应App的调起方法,所述可执行程序为amstart activity。

A11、一种通知对应App的调起装置,所述装置包括如下模块:

接收模块,用于接收调用通知对应App的请求;

判断模块,用于判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件;

广播调用模块,用于通过Intent调用BroadcastReceiver组件;

壳调用模块,用于通过BroadcastReceiver组件调用Shell命令;

应用程序调起模块,用于通过Shell命令调用所述App的Activity组件,从而调起所述App。

A12、如A11所述的通知对应App的调起装置,调用所述BroadcastReceiver组件的命令预先存储在Intent中。

A13、如A11所述的通知对应App的调起装置,Broadcast Receiver组件通过执行函数调用Shell命令。

A14、如A11所述的通知对应App的调起装置,Shell命令通过可执行程序直接调用所述App的Activity组件。

A15、如A11所述的通知对应App的调起装置,所述可执行程序为amstart activity。

A16、一种通知对应App的调起装置,所述装置包括如下模块:

接收模块,用于接收调用通知对应App的请求;

判断模块,用于判断是否有权限调用所述App的Activity组件,如果有则直接调用所述Activity组件;

服务调用模块,用于通过Intent调用Service组件;

壳调用模块,用于通过Service组件调用Shell命令;

应用程序调起模块,用于通过Shell命令调用所述App的Activity组件,从而调起所述App。

A17、如A16所述的通知对应App的调起装置,调用所述Service组件的命令预先存储在Intent中。

A18、如A16所述的通知对应App的调起装置,Service组件通过执行函数调用Shell命令。

A19、如A16所述的通知对应App的调起装置,Shell命令通过可执行程序直接调用所述App的Activity组件。

A20、如A19所述的通知对应App的调起装置,所述可执行程序为amstart activity。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1