博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android在一个应用程序中启动另一个应用程序
阅读量:6914 次
发布时间:2019-06-27

本文共 5443 字,大约阅读时间需要 18 分钟。

转自如下相关博客:《》http://www.cnblogs.com/airry66/p/3966569.html

                                    《》http://hunankeda110.iteye.com/blog/1960444

                                    《》http://peirubing.iteye.com/blog/1568145

 

Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。 

一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: 

1
2
3
4
5
Intent intent = 
new 
Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);          
ComponentName cn = 
new 
ComponentName(packageName, className);          
intent.setComponent(cn);
startActivity(intent);

或者这样:

Intent intent = new Intent();
  PackageManager packageManager = this.getPackageManager();
  intent = packageManager.getLaunchIntentForPackage(packageName);
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP) ;
  this.startActivity(intent);

但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。 

 

第一步:怎么获得包名?

PackageManager packageManager = context.getPackageManager();

packageManager.getInstalledApplications(0);

这就得到了手机上安装的所有应用的程序信息,当然包括包名,只需要查找自己需要的程序就可以了。

 

17
18
19
20
21
22
23
private 
void 
openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 
0
);
 
Intent resolveIntent = 
new 
Intent(Intent.ACTION_MAIN, 
null
);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
 
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 
0
);
 
ResolveInfo ri = apps.iterator().next();
if 
(ri != 
null 
) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
 
Intent intent = 
new 
Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
 
ComponentName cn = 
new 
ComponentName(packageName, className);
 
intent.setComponent(cn);
startActivity(intent);
}
}

 

启动浏览器

代码与范例:

12
  1.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
  2.  
    startActivity(intent);

说明:启动浏览器并前往http://www.google.com 。

启动拨号程序

代码与范例:

12
  1.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW, Uri.parse("tel:138"));
  2.  
    startActivity(intent);

说明:启动拨号程序并输入号码138。

通话

代码与范例:

123
  1.  
    Uri uri=Uri.parse(
    "tel:138");
  2.  
    Intent intent=
    new Intent(Intent.ACTION_CALL,uri);
  3.  
    startActivity(intent);

说明:拨打号码138。需要为程序申请权限<uses-permission android:name=”android.permission.CALL_PHONE”/>。

发送短信

代码与范例:

1234
  1.  
    Uri smsUri = Uri.parse(url);
  2.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW, smsUri);
  3.  
    intent.setType(
    "vnd.android-dir/mms-sms");
  4.  
    startActivity(intent);

说明:启动短信程序。

启动通讯录

代码与范例:

12
  1.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/1"));
  2.  
    startActivity(intent);

说明:启动同学录的某一条目。

启动地图程序(Google Maps等)

代码与范例:

123
  1.  
    Uri mapUri = Uri.parse(url);
  2.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW, mapUri);
  3.  
    startActivity(intent);

说明:启动地图程序。

搜索路线

代码与范例:

12345
  1.  
    Intent intent = 
    new Intent();
  2.  
    intent.setAction(Intent.ACTION_VIEW);
  3.  
    intent.setClassName(
    "com.google.android.apps.maps","com.google.android.maps.MapsActivity");
  4.  
    intent.setData(Uri.parse(
    "http://maps.google.com/maps?myl=saddr&amp;daddr=&amp;dirflg=d"));
  5.  
    startActivity(intent);

说明:启动Google Maps并搜索路线,具体的方法另外补充。

启动邮件程序

代码与范例:

12345
  1.  
    Uri uri =Uri.parse(
    "mailto:xxx@example.com");
  2.  
    Intent intent = newIntent(Intent.ACTION_SENDTO, uri);
  3.  
    intent.putExtra(Intent.EXTRA_SUBJECT, 
    "Hello world");
  4.  
    intent.putExtra(Intent.EXTRA_TEXT, 
    "Ganbarimasu");
  5.  
    startActivity(intent);

说明:启动邮件程序并将收件人设为xxx@example.com,邮件主题设为Hello world,内容设为Ganbarimasu。

启动邮件程序并添加多个收件人

代码与范例:

123456789
  1.  
    Intent intent=
    new Intent(Intent.ACTION_SEND);
  2.  
    [] tos={
    "me@example.com"};
  3.  
    []ccs={
    "you@example.com"};
  4.  
    intent.putExtra(Intent.EXTRA_EMAIL, tos);
  5.  
    intent.putExtra(Intent.EXTRA_CC, ccs);
  6.  
    intent.putExtra(Intent.EXTRA_TEXT, 
    "The email body text");
  7.  
    intent.putExtra(Intent.EXTRA_SUBJECT, 
    "The email subject text");
  8.  
    intent.setType(
    "message/rfc822");
  9.  
    startActivity(Intent.createChooser(intent,
    "Choose Email Client"));

说明:启动邮件程序并设置为发送给多个收件人。

启动邮件程序并添加附件

代码与范例:

12345
  1.  
    Intent intent = newIntent(Intent.ACTION_SEND);
  2.  
    intent.putExtra(Intent.EXTRA_SUBJECT, 
    "The email subject text");
  3.  
    intent.putExtra(Intent.EXTRA_STREAM,
    "file:///sdcard/mysong.mp3);
  4.  
    sendIntent.setType("audio/mp3");
  5.  
    startActivity(Intent.createChooser(intent,"Choose Email Client"));

说明:启动邮件程序并添加附件。

播放MP3文件

代码与范例:

1234
  1.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW);
  2.  
    Uri uri =Uri.parse(
    "file:///sdcard/song.mp3");
  3.  
    intent.setDataAndType(uri,
    "audio/mp3");
  4.  
    startActivity(intent);

说明:启动音乐程序并播放MP3歌曲。

卸载程序

代码与范例:

123
  1.  
    Uri uri =Uri.fromParts(
    "package", strPackageName, null);
  2.  
    Intent intent = newIntent(Intent.ACTION_DELETE, uri);
  3.  
    startActivity(intent);

说明:卸载包名为strPackageName的程序。

安装程序

代码与范例:

12
  1.  
    Uri installUri = Uri.fromParts(
    "package",strPackageName, null);
  2.  
    returnIt = newIntent(Intent.ACTION_PACKAGE_ADDED, installUri);

说明:安装包名为strPackageName的程序。

启动设置

代码与范例:

12
  1.  
    Intent intent=
    new Intent("android.settings.SETTINGS");
  2.  
    startActivity(intent);

说明:进入设定程序。

启动电子市场

代码与范例:

123
  1.  
    Uri uri=Uri.parse(
    "market://search?q=pname:org.breezesoft.techolite");
  2.  
    Intent intent=
    new Intent(Intent.ACTION_VIEW,uri);
  3.  
    startActivity(intent);

说明:以包名org.breezesoft.techolite为条件启动Android Market。

启动电子市场并进入程序信息界面

代码与范例:

123
  1.  
    Uri uri = Uri.parse(
    "market://details?id=org.breezesoft.techolite");
  2.  
    Intent intent = 
    new Intent(Intent.ACTION_VIEW, uri);
  3.  
    startActivity(intent);

说明:启动Android Market并进入包名为org.breezesoft.techolite的程序的详细信息界面。

从图库(Gallery)中选择并获取一张图片

代码与范例:

1234
  1.  
    Intent intent = 
    new Intent();
  2.  
    intent.setType(
    "image/*");
  3.  
    intent.setAction(Intent.ACTION_GET_CONTENT);
  4.  
    startActivityForResult(intent, 
    11);

说明:启动图库并中选择并获取一张图片,返回原程序。

 

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
软考上午题难点5分钟攻克系列(三)
查看>>
Linux 文件系统
查看>>
Linux下打开ISO文件两种方法
查看>>
Linux运维中安装Mysql使用的操作命令总结及其问题处理
查看>>
shell 直接截取字段
查看>>
git branch - sth.
查看>>
STP理论05-RSTP拓扑变化处理及与STP互操作
查看>>
Java基础学习总结(20)——基础语法
查看>>
maptail
查看>>
Maven学习总结(六)——Maven与Eclipse整合
查看>>
BZOJ4517[Scoi2016]美味——主席树
查看>>
谷歌施压惹众怒 手机厂商再战自主OS
查看>>
RabbitMQ学习总结(3)——入门实例教程详解
查看>>
oracle Converting an Administrator-Managed Database to a Policy-Managed Database
查看>>
在job或其他任意java类中获取ServletContext对象
查看>>
使用Python进行稳定可靠的文件操作
查看>>
Java导出富文本到word
查看>>
我的友情链接
查看>>