⑴ 怎么打开第三方应用程序
需求场景:
在自己开发的应用程序里,有个跳转到其他应用的按钮,比如分享到“新浪微博”,当点击这个按钮时,先判断手机中是否有安装“新浪微博”这个程序,有则启动“新浪微博”客户端,否则从指定的URL地址进行下载。
简言之,开启其他应用,包名跳转。
1、从一个应用跳转到其他应用要获取什么信息?
need第三方应用的包名,以及下载链接。
2、如何判断本机是否已经安装了该第三方应用?
(1)首先得到该程序的包名;
别人的应用程序我怎么知道他的包名和类名?
- 通过adb里面看程序装的所有应用
- 写一个遍历程序,获取所有已安装的程序,把包名打印出来,新浪微博的包名中应该会带有sina字眼,如 com.sina.weibo
//获取已经安装apk列表
List<PackageInfo> packList = context.getPackageManager().getInstalledPackages(0);
//获得包名PackageInfo.packageName
(2)然后通过PackageManager判断是否存在该包的程序 。
android的每一个apk的activity的包的名字都是唯一的,所以可以通过判断这个activity所在包的名字来判断是不是该Apk已经安装
例1:
//以twitter程序为例,假设twitter程序包名为“com.twitter.android”。这时候可用以下代码来判断是否被安装。
//QQ客户端的包名是"com.tencent.mobileqq"
PackageInfo packageInfo;//PackageInfo所在包为android.content.pm
try {
packageInfo = this.getPackageManager().getPackageInfo("com.twitter.android", 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if(packageInfo ==null){
System.out.println("没有安装");
}else{
System.out.println("已经安装");
}
例2:可以封装到方法里,操作一样,只是把包名作为参数传入,返回值为布尔类型
private boolean isPkgInstalled(String pkgName) {
PackageInfo packageInfo = null;
try {
packageInfo = this.getPackageManager().getPackageInfo(pkgName, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
return false;
} else {
return true;
}
3、怎么跳转?
通过隐式intent跳转
例3:PackageManager中有getLaunchIntentForPackage这个方法!
//String pkg代表包名,String download代表下载url
final PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(pkg);
if (null == intent) {//没有获取到intent
if (!TextUtils.isEmpty(downoad)) {//跳转到下载第三方应用界面
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(downoad)));
}
} else {
context.startActivity(intent);
}
例4:在我们自己的程序中调用其他程序时往往要检查手机有没有安装该软件后再做相应操作,如没有安装,用intent将用户引导至android market去下载该程序,如已安装则打开该程序,并传入参数和调用其功能。
//下面介绍怎么判断手机已安装某程序的方法:
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager();//获取packagemanager
List< packageInfo> pinfo = packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息
List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pName list中
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE
}
//下面是调用该方法进行判断后的逻辑:
//已安装,打开程序,需传入参数包名:"com.skype.android.verizon"
if(isAvilible(this, "com.skype.android.verizon")){
Intent i = new Intent();
ComponentName cn = new ComponentName("com.skype.android.verizon",
"com.skype.android.verizon.SkypeActivity");
i.setComponent(cn);
startActivityForResult(i, RESULT_OK);
}
//未安装,跳转至market下载该程序
else {
Uri uri = Uri.parse("market://details?id=com.skype.android.verizon");//id为包名
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
参考链接:http://www.eoeandroid.com/thread-152763-1-1.html?_dsign=2242c74c
4、跳转后呢?
如何在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序?
//你只需要在A中打开B,并为B设置 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//不做对A的关闭处理finish() 这样就可以了
Intent intent=new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName(objAppClassName, mainActivity));
context.startActivity(intent);
例5:原始跳转方法,要包名和类名(通过ComponentName),后来可以只要包名…
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。
一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
但是更多的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。
下面是实现代码:
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);
}
}
⑵ 手机第三方软件是怎么用手机的
一般第三方软件在你下载安装的时候会要你同意他会获取的权限的内容后才能安装,安装以后你在操作第三方软件(或者在后台的时候)的时候它就会自动使用手机
⑶ 怎样把手机第三方软件设置成内置软件
首先把你的手机破解了,那就OK啦,想装啥软件就装啥软件
⑷ 怎么把第三方软件装进手机系统
可以把程序直接移动到system/app这个文件夹,并且修改权限,就可以使第三方程序变成系统程序,恢复出厂设置也不会消失!
(注意,有的程序得改成相应的'名字',我的建议是先正常安装,然后用'海卓云卸载'来删除,删除时保留,就能够得到真正的''真名apk)
⑸ 手机的第三方应用程序如何下载
在手机第三方应用里下载,比如360手机助手等。
⑹ 谁能告诉我,为什么我的手机进第三方软件,有的可以进,有的就是手机一片空白,没有任何提示呢
这样的情况就是有的第三方软件打不开,这样的情况也不排除软件本身问题,你可以在正规的应用软件里下载,如应用宝之类的软件里下载,再就是系统升级导致的软件和手机不兼容或是兼容不好导致,可以看看软件是否有升级版本。
⑺ 怎么把手机里允许第三方软件这个设置关掉
摘要 您好,很高兴为您解答~,请您稍后,我正在快马加鞭为您整理答案,5分钟内回复给您
⑻ android手机第三方软件权限
其实你说的问题,都是存在的,我们遇到的时候都是见怪不怪了,大多我们的手机都是取得ROOT权限了,然后让 正规的软件获取权限,但是不要下载那些很少用的软件防止中毒。软件获得权限后功能上提供的更加好了,如果你不喜欢别人获取你的手机资料,你就取消吧。但是相应的GOOGLE,或者上网时地理的定位功能是没有,对你应该是没问题吧,
好,现在回答你的问题。
1、获取imei权限(说实话没有听过,估计是指root权限),就是指获取GPS地理位置呀,短信呀,之类的。后台运行走流量。不是寻找合适手机型号软件用的。
2、UC获取的原因是你在登陆网址后可以记录你的地理位置,你也可以看见别人上传照片的地理位置,等等,
3、imei权限(我当做root权限吧)你还是先禁用吧。原因就是你估计还不太熟悉这些个应用吧!先去各个网站的论坛去看看学学吧!推荐机锋网、安卓网。
⑼ 什么系统手机支持第三方软件
你好,除了买新手机上自带的部分软件,其他的都属于第三方软件。第三方软件指的是该非线性编辑系统生产商以外的软件公司提供的软件。