Android 指定调用已安装的某个“相机”App
在做项目时,有这样一个需求:如果我的手机中安装了四个相机软件,那么,在调用系统相机的时候,这四个相机软件都会被列出来,但是其中的两个在拍照完后并不能将拍得的照片返回给我,因此,能不能指定开启一个我已知的能返回照片的相机App?
整个解决过程如下:
参考资料:http://my.oschina.net/armsky/blog/54692
运行参考资料中所示代码时,遇到两个问题:
(一)、“相机”App同一时间被打开两次;意即我需要按两次“返回”才能退出被打开的“相机”App。
(二)、用“相机”App拍完照后不能得到其返回值。事实上,如果用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE)来调用“相机”App是会得到拍到的照片的。
因此,在参考资料文中所示代码的基础上做了修改,解决了上述两个问题。具体的代码如下所示:
- PackageInfo pi = null;
- try {
- //获得相机包名信息
- pi = getPackageManager().getPackageInfo("com.motorola.CameraF", 0);
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- //获得当前应用程序的包管理器
- PackageManager pm = TestCallBackExampleActivity.this.getPackageManager();
- 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的Action设置为捕获照片
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- // Intent intent = new Intent(Intent.ACTION_MAIN); // 相机主界面
- // 设置期望被打开的App包名和类名
- ComponentName cn = new ComponentName(packageName, className);
- intent.setComponent(cn);
- startActivityForResult(intent, 1);
- }
Android 指定调用已安装的某个“相机”App的更多相关文章
- android开发里跳过的坑——调用已安装视频播放器在有些机器上无效
调用已安装视频播放器播放未修改之前的代码 private void startPlay(String fileName){ File file = new File(fileName); Intent ...
- Android手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法
http://blog.csdn.net/dyllove98/article/details/8830264 如果你不是开发者:如果你在android上更新一个已经安装过较早版本软件时,安装到最后一步 ...
- Android中对已安装应用的管理实现
获取.管理手机中已安装的所有应用信息 1.创建应用的实体类AppInfo,属性有应用的名称.包名.图标.第一次安装时间和版本名称 public class AppInfo { private Stri ...
- Android 调用已安装市场,进行软件评分的功能实现
Uri uri = Uri.parse("market://details?id="+getPackageName()); Intent intent = new Intent(I ...
- 〖Linux〗Android NDK调用已编译好的C/C++动态连接库(so文件)
一.背景:假定已有应用程序zigbeeclient.cpp,内容如下: ... extern "C" { int getresult(int argc, char **argv); ...
- Android下得到已安装Application信息
在上一篇blog中,谈到如何利用APK archive文件得到相应信息.(当时发现例如ProcessName,DataDir等信息,其实是无法得到的). 当前咱们看看如何通过系统取得已经安装的Appl ...
- iOS企业版应用发布(部分低版本系统)无法安装到最新版app的问题-缓存导致
通过自己网站发布企业版app时,经过测试发现在部分已安装过旧版app的低版本ios手机存在这样的问题 :扫码覆盖安装新版app,安装到的仍然是就版本的app.这样就导致部分用户一直无法更新到最新版本. ...
- Android 关于调用系统内已安装的相机问题
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,1); 调用系统内已安 ...
- Unity获取安卓手机运营商,电量,wifi信号强度,本地Toast,获取已安装apk,调用第三方应用,强制自动重启本应用
一个完整的游戏项目上线需要不断的完善优化,但是到了后期的开发不再仅仅是游戏了,它的复杂度远远大于纯粹的应用开发.首先必须要考虑的就是集成第三方SDK,支付这块渠道商已经帮你我们做好了,只需要按照文档对 ...
随机推荐
- maven jar包冲突的发现与解决[工具篇]
本文是我的第177篇文章. 关于jar冲突排查解决的问题,相信很多小伙伴也都知道有一些,无非就是两类:命令 or 工具. 命令方式比如: mvn dependency:tree 工具方式比如: Mav ...
- 6.使用Go向Consul注册的基本方法
编写注册函数 package utils import ( consulapi "github.com/hashicorp/consul/api" "log" ...
- Windbg源代码窗口的使用
在 WinDbg 中,源窗口显示已加载到调试器中的源文件. 如何打开源代码窗口 通过菜单File--->Open Source File打开源代码文件,窗口随之打开 通过快捷键Ctrl+O 通过 ...
- python合并字典
给定一个字典,然后计算它们所有数字值的和. 实例 1 : 使用 update() 方法,第二个参数合并第一个参数 def Merge(dict1, dict2): return(dict2.updat ...
- ESA2GJK1DH1K基础篇: 测试APP扫描Air202上面的二维码绑定通过MQTT控制设备(兼容SIM800)
前言 此程序兼容SIM800 如果想绑定SIM800,请把其IMEI号,生成二维码,用手机APP扫描. 实现功能概要 APP通过扫描二维码获取GPRS设备的IMEI号,然后设置订阅的主题:device ...
- 【转】AVL之C++实现
AVL树的介绍 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. 上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1:而右边的不 ...
- T2:中间值(median)———2019.10.15
代码: #include <bits/stdc++.h> int ri() { , f = ; ; ) + (x << ) - ' + c; return x * f; } ; ...
- PATA1012The Best Rank(25分)
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- CSS居中方案
1.行内元素或者内联元素 1.垂直居中 设置行高和高度一致,如果没必要设置高度的话,可以直接利用line-height垂直性,直接设置需要的高度为line-height的高度亦可居中 .center- ...
- Executor多线程框架
啥都别说了,上代码: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impor ...