当前位置:  编程技术>移动开发
本页文章导读:
    ▪在一个apk中调用除此以外一个apk中的activity        在一个apk中调用另外一个apk中的activity     其实,这本来是一件很简单的事情,但是我发现很多人问我这个问题,所以写篇小文章供参考。     系统提供了很多可以直接调用的Activity,通.........
    ▪ WAP开发入门与增高之WML基础概念 - WML的简单例子及编辑、测试方法        WAP开发入门与提高之WML基础概念 -- WML的简单例子及编辑、测试方法 第二部分:WML基础概念 -- WML的简单例子及编辑、测试方法完成WAP服务器的建立和WAP浏览器的安装之后,我们接下来就可.........
    ▪ startActivity的requires new task错误解析       startActivity的requires new task异常解析     很多人使用startActivity时候,会碰到如下的异常: Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACT.........

[1]在一个apk中调用除此以外一个apk中的activity
    来源: 互联网  发布时间: 2014-02-18
在一个apk中调用另外一个apk中的activity

    其实,这本来是一件很简单的事情,但是我发现很多人问我这个问题,所以写篇小文章供参考。


    系统提供了很多可以直接调用的Activity,通过指定的Intent就可以调用,比如打开搜索的:

 

Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);
 

     Intent.ACTION_WEB_SEARCH是一个字符串,是“搜索”这个Activity的标识,extra是传给这个activity的一些数据。发送出这个intent之后,系统根据action字符串Intent.ACTION_WEB_SEARCH知道了是要调用哪个activity,如果有重名,会弹出一个选择对话框。然后打开此activity,实现想要做的事情。


    那么,我们自己怎么来实现呢。
    首先,写一个activity,在AndroidManifest.xml里面的intent-filter中,给这个activity命名,

 

<intent-filter>
        <action android:name="chroya.foo"/>
        <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
 

    然后安装。安装完毕之后,你会发现,系统中找不到这个程序。别急,它确实安装在手机里面了,但是因为他不是main的,所以系统不会把他当做Application的入口程序。


    而要想打开这个activity,只有知道它名字的人才可以。跟系统的intent一样使用。它的名字定义为"chroya.foo",所以,这里用这个字符串就可以调用它了:

 

Intent intent = new Intent("chroya.foo");
startActivity(intent);
 

    我用刚才举的那个系统的intent说明,它的activity里面使用getIntent().getBundleExtra(SearchManager.QUERY)来接收传递进来的搜索字符串参数。而这个SearchManager.QUERY是关键字。如果要自己实现这种功能,只需要定义好关键字,然后从BundleExtra中取就行了。

1 楼 hshm 2010-09-20  
LZ,A.apk中调用代码安装C.apk,安装完后,自动启动C.apk ,应如何实现
2 楼 chroya 2010-09-21  
hshm 写道
LZ,A.apk中调用代码安装C.apk,安装完后,自动启动C.apk ,应如何实现

你是不知道如何安装C.apk,还是不知道什么时候安装完,还是不知道如何自动启动C.apk?
3 楼 jinbinhan 2010-10-08  
如果不知道另一个apk 的标识怎么调用呢?
4 楼 jayliud 2010-11-18  
jinbinhan 写道
如果不知道另一个apk 的标识怎么调用呢?

可以反编译一下,然后就可以查看AndroidManifest.xml文件里面内容咯
5 楼 lovext 2010-11-25  
jayliud 写道
jinbinhan 写道
如果不知道另一个apk 的标识怎么调用呢?

可以反编译一下,然后就可以查看AndroidManifest.xml文件里面内容咯

apk不是基于标准的java vm,至今为止,用什么反编译?
6 楼 gaogaf 2011-03-15  
apktool
7 楼 王山而 2011-04-08  
LZ我想问一下我有一个“Library”的apk,还有一个“application”的apk
现在通过工程依赖编译通过(安装提示装完“application”的apk后又调用“Library”的apk安装),但运行时提示找不到类。
8 楼 kkvsyy 2011-06-01  
有意思 有意思 
9 楼 avi9111 2011-06-15  
好的,正需要,顶下你
10 楼 changkunyang 2011-06-16  
恩,这种方式实用场景有限,第一、C应用很难知道A已经安装。第二、从实用的角度上讲,如果C应用肯定而且是必须要用到A应用,那么用户在安装C的时候还需要安装A。
举一个例子说,如果C应用要使用到充值计费,但是又不想把计费代码和C写在一起,如果按你的方法,那还必须要安装充值计费的应用,如果不安装,相当于整个C应用就缺胳膊少腿了。还有一个场景,就是如果是同一个公司开发的应用,有很多代码都是重复的,这个时候肯定会考虑将这些重复的代码独立出来,封装成第三方应用,然后其他应用如果有需要的时候就引入,而不是每次拷贝一份。

    
[2] WAP开发入门与增高之WML基础概念 - WML的简单例子及编辑、测试方法
    来源: 互联网  发布时间: 2014-02-18
WAP开发入门与提高之WML基础概念 -- WML的简单例子及编辑、测试方法
第二部分:WML基础概念 -- WML的简单例子及编辑、测试方法

完成WAP服务器的建立和WAP浏览器的安装之后,我们接下来就可以使用WML语言来编写WAP网页或应用,并通过WAP服务器及浏览器进行调试。从本章开始我们将系统地学习WML语言,本章主要讲解WML语言的基础知识,下一章全面讲解WML的语法、标签和规则。

2.1 WML的简单例子及编辑、测试方法

无限标记语言WML(Wireless Markup Language)是一种基于扩展标记语言XML(Extension Markup Language)的语言,是XML的子集。它可以显示各种文字、图像等数据,是由WAP论坛(http://www.wapforum.org)提出并专为无线设备用户提供交互界面而设计的,目前版本为1.1版。这些无线设备包括移动电话,呼机和个人数字助理PDA(Personal Digital Assistants)等。

2.1.1 WML与WAP设备

为了更好的了解和使用WML语言,开发人员应对WML使用的设备和支持WML的设备的特点、特征有个大概的了解。

一般而言,WML使用的无线设备通常具有以下特点:

与普通的个人计算机相比,体积较小;
设备的内存有限,且其CPU性能也有限;
通讯带宽较窄、时延较长。

以移动电话、PDA为例来讲,支持WML的设备主要具有以下特征:

有一个显示屏幕,可显示2.凶址啃?2各字符;2.凶址型ǔ0ūA舾δ馨磁サ囊恍校?br>支持数字和字符的输入;
支持操作者使用箭头或数字按钮进行选择;
支持ASCII的可打印码;
通常都有两个可编程功能键,即Accpet键和Options键,一般安排在接近键盘的屏幕下方;
通常有一个Prev导航键。

我们介绍WML所使用WAP设备的目的,是希望读者通过WAP设备的特点、特征来了解WML语言的特点,进而对WML编程所要解决的问题有个大概的认识。

2.1.2 使用文本编辑器面写WML程序

使用WML语言编写WAP网页或应用时,需要使用一个编辑器进行编辑。与HTML编程一样,WML编写的程序也是纯文件文本,可以使用任意文本编辑器进行编写,比如Windows系统中的“记事本(NotePad)”等。也可以使用比如Nokia WAP Toolkie等软件(有关此具体的用法会在以后的学习过程中提起)。我们先介绍第一种方法,随后介绍第二种。

如果要使用"记事本(NotePad)"来编写WML程序,则可以在Windows系统中,单击“开始”按钮,然后从出现的菜单中,依次将光标指向“程序”、“附件”、“记事本”,启动“记事本”程序。屏幕上随后就会出现它的编辑窗口,从中就可以输入并编写WML程序了。

作为举例,我们可以输入如下简单的程序。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//wapforun//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<xml>
<card id="card1" title="Title">
<P>
<!--Write your card implementation here.-->
Hello World!!
</P>
</card>
</xml>

输完后将它保存为hello.xml文件。保存时注意文件的扩展名应为xml而不是txt。


第二部分:WML基础概念 -- WML程序结构

2.2 WML程序结构

上一节我们降解了一个简单的WML程序,具有HTML编程的读者可以看出,WML程序在结构上形式上与html程序有很多相似之处。下面我们就根据一个实例来分析一下WML程序的结构及组成。

2.2.1 WML的元素和标签

分析实例之前,我们有必要对WML的元素和标签予以简单说明。与HTML类似,WML的主要语法也是元素和标签。元素是符合DTD(文档类似定义)的文档组成部分,如title(文档标题)、IMG(图像)、table(表格)等等,元素名不区分大小写。WML使用标签来规定元素的属性和它在文档中的位置。标签使用小于号(<)和大于号(>)括起来,即采用“<标签名>”的形式。标签分单独出现的标签和成对出现的标签两种。大多数标签是成对出现的,由首标签和尾标签组成。首标签和尾标签又分别称为起始标签和终止标签。首标签的格式为“<元素名>”,尾标签的格式为 “</元素名>”。成对标签用于规定元素所含的范围,比?lt;b>和</b>标签用于界定黑体字的范围,也就是说<b>和</b>之间包住的部分采用黑体字显示。单独标签的格式为“<元素名/>”,他的作用是在相应的位置插入元素。如〈br/〉标签表示在该标签所在位置插入一个换行符。

2.2.2 WML程序结构形式及组成的实例分析

了解了上述知识后,下面我们在分析一个实例程序。程序如下:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapfourm.org/DTD/wml_1.1.xml">

<wml>

<card id="card1" ontimer="#card2" title="Tookit Demo">
<timer value="50"/>
<p aligh="center">
</br></br></br>
<big>
<!--Write your card implementation here.-->
Welcome to....
</big>

</p>
</card>

<card id-"card2" ontimer="#card 3"title="Toolkit Demo">
<timer value="50"/>
<p align="center">
<br/><br/>
<b>
The Nokia<br/>
</b>
Wireless Application Protocol
</u>
...
</p>
</card>

<card id="card3"title="Toolkit Demo">
<p align="center">
<br/><br/><br/>
<big>
<i>
Toolkit
</i>
</big>
</p>
</card>

</xml>

该程序运行后将在WAP手机屏幕依次显示3屏信息。先显示"Welcome to ...",然后显示"The Nokia Wireless Application Protocol...",最后显示"Tookit!"。显示时每屏都有标题"Tookit Demo",相邻两屏之间延时为50,其单位大小为1/10秒,延时50即5秒。

通过以上实例我们可以了解到WML程序的结构形式及组成:

1)语法。WML与HTML极为相似。仍然是一种标记语言,并且延续了XML的语法规则,具体的语法我们会以后的学习过程中遇到。

2)文件声明。所有的WML程序必须在文件的开头处声明XML文件类型,包括XML的版本,WML的文档类型、所用规范等。声明形式如下:

<?xml version="1.0">
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

3)标签。在WML语言中需要使用标签(Tag),其使用形式与HTML和XML等标记语言中的形式是完全一致的。

4)元素。WML的元素(Element)用于描述卡片组(Deck)的标记信息即结构信息。一个元素通常有一个首标签、内容、其它元素及一个尾标签组成,具有下述两种结构之一:

<首标签>内容</尾标签>

<标签/>

元素包含的内容中还可以有元素,这些元素也是有首标签、相应内容、其它元素及尾标签组成。不包含内容的元素成为空元素。它为一个单独的标签。或者说,单独的标签也是一种元素。

5)属性。WML与XML一样,其标签可以包含很多属性。属性用于给标签提供必要的附加信息,且属性内容通常在起始标签内使用。不过,属性内容不会被浏览器显示,它至作为参数为标签提供必要的信息。

指明属性值的时候,需要把该值用引号扩起来,可以是单引号或者双引号,引号通常成对嵌套使用。属性名称必须小写。例如:<card id="card 1" ontimer="#card2" title="Toolkit Demo">

而且,单引号的属性中还可以包含双引号的属性。实体字符也可以作为属性值。实体字符是指诸如&、<、>、'、"的特殊字符,在WML程序中显示着类字符需要特殊处理,后面我们介绍具体方法。

6)注释。WML程序中也可以加入注释。注释内容用于给开发人员顺利阅读源代码提供方便,它不会被浏览器显示出来。注释内容在标签中用感叹号(!)引出,并用于<!--注释内容-->的形式。例如:<!-- Write your card implementation here.-->。需要说明的是,XML程序中不支持注释的嵌套。

7)文档结构。WML文档是由“卡片(Card)”和“卡片组(Deck)”构成的,一个Deck是一个或多个Card的集合。当客户端发出请求之后,WML即从网络上把Deck发送到客户浏览器,这是用户就可以浏览Deck内包含的所有Card,而不必从网上单独下载每一个Card,程序中的第一个Card是缺省得可见的Card。

注意:Deck是一副纸牌的意思,这里是指一叠卡片,所以我们在这里称之为它为“卡片组”。另外,Card指的是WAP手机屏幕大小的网页,尽管有时一个 Card可能需要多屏才能显示完,但我们也可以把它翻译成“页面”,不过这样与HTML中的页面容易混合。因此我们在这里称之为卡片。

2.2.3 WML程序的基本结构

以上我们简单分析了WML的程序结构及组成,由此大家可以对WML程序有个整体上的初步认识。下面我们给出WML程序的基本结构。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1xml">
<wml>
<head>
<access/>
<meta..../>
</head>
<card>
Some contents...
</card>
<wml>


该基本结构可以分为以下几个关键部分:

1)声明。WML程序有许多Deck组成,对于每一个Deck,在其文档开头必须进行XML的声明和文档类型DOCTYPE的声明。

XML声明总是在文件的第一行,注意前面最好不要有空格或者还行:

<?xml version="1.0"?>

2)紧跟着是DOCTYPE声明,注意声明是字母的大小写不要搞错:

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1xml">

3)<xml>标签。该标签用于包含和定义WML的一个Deck。它有一个可选的xml:lang属性来制定文档的语言,比如<wml xml:lang="zh">表示文档语言为中文。

4)<head>标签。该标签用于包含和定义Deck的相关信息。<head>标签之间可以包含一个<access>标签和多个<meta>标签。

5)<access/>标签。它的一般形式是<access domain="域" path="/路径"/>,主要用于制定当前Deck的访问控制信息,有两个可选的属性。其中,domain用来制定域,默认值为当前域,path 用来制定路径,默认值为“/”,即跟目录。由于<access>单独使用,所以要用“/”结尾,后面我们还会系统的讲解WML的各种标签,这里即使看不懂也没关系,主要有些感性的认识就可以了。

6)<meta...>标签。它的一般形式是<meta 属性 content="值" scheme"格式" forua="true|false"/>,用于提供当前Deck的meta信息,包括内存数据处理方式,以及数据传输方式和处理方式等。有关该标签的详细内容我们后面会专门给出。

7)<card>标签。一个Deck可以包含多个Card,每个Card的内容可能不止一屏显示。对于每一个Card,WML均使用<card>和</card>进行包含和定义。 <card>同时可以包含多个可选的属性,如<card id="name" title="label" newcontext="false" ordered="true" onenterforwand="url" pmemterbackward="url" ontimer="url">。至于这些属性的具体含义及功能,我们将在后面介绍。

    
[3] startActivity的requires new task错误解析
    来源: 互联网  发布时间: 2014-02-18
startActivity的requires new task异常解析

    很多人使用startActivity时候,会碰到如下的异常:

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?


    我曾经也遇到过,不过后来研究了一下之后,明白了原理,记下来,以为碰到同样困扰的兄弟们解惑。


    都知道,Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

 

     这样就可以再新的task里面启动这个Activity了。

1 楼 unicorn25 2010-08-30  
遇到过同样问题,谢谢分享
2 楼 Leonaking 2011-02-23  
在不是必须要new task 的情况下尽量使用

Intent intent = new Intent(OOXXActivity.this, ImageSwitcherActivity.class);
			
OOXXActivity.this.startActivity(intent);


来启动一个新的acticity,不然acticity的history会乱套,并且在关闭应用时需要做更多的工作
3 楼 dingran 2011-10-24  
我发现如果是setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

就不起作用,还是会报如上的异常,

是不是说setFlags就是设置了只有一个能生效的flag呢,还是说这两个都一样,只是

set的方法可以用|来并列添加呢?

牙兄,请解答一下好吗

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3