当前位置:首页 » 安卓系统 » android权限拒绝

android权限拒绝

发布时间: 2023-01-10 17:03:49

Ⅰ Android带权限的操作,怎么判断是否被拒绝

Android带权限的操作,判断是否被拒绝,可以使用AppOpsManager 这个类提供的方法来判断,代码如下: /* * 检查某项权限是否被允许还是拒绝 * * @param context * @param op * 权限代码 * @return 1为拒绝,0为允许 */ @TargetApi(19) private int checkOp(Context context, int op) { final int version = Build.VERSION.SDK_INT; if (version >= 19) { try { AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE); Method dispatchMethod = AppOpsManager.class.getMethod( "checkOp", new Class[] { int.class, int.class, String.class }); int mode = (Integer) dispatchMethod.invoke( appOpsManager, new Object[] { op, Binder.getCallingUid(), context.getPackageName() }); return mode; } catch (Exception e) { e.printStackTrace(); } } return -1; }

Ⅱ Android申请权限,拒绝、永久拒绝

例如

申请定位权限:

if (Build.VERSION.SDK_INT >=M && !hasPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {

    String[] permissions =new String[1];

    permissions[0] = Manifest.permission.ACCESS_COARSE_LOCATION;

    Log.e("TAG", "onRequestPermissionsResult 申请权限");

    //申请权限

    ActivityCompat.requestPermissions(this,       permissions,MY_LBS_PERMISSION_REQUEST_CODE);

}

//处理权限请求

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

if (requestCode ==MY_LBS_PERMISSION_REQUEST_CODE) {

boolean isAllGranted =true;

        for (int grant : grantResults) {

if (grant != PackageManager.PERMISSION_GRANTED) {

isAllGranted =false;

break;

            }

}

if (isAllGranted) {

Log.e("TAG", "onRequestPermissionsResult 同意");

        }else {

List notAsk =new ArrayList<>();

            for (String permission : permissions) {

Log.e("TAG", "onRequestPermissionsResult - 循环 -");

                if (!ActivityCompat.(this, permission)

&& ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {

notAsk.add(permission);

                }

}

if (notAsk.size() >0) {//拒绝不再提醒

                Log.e("TAG", "onRequestPermissionsResult 拒绝不再提醒");

            }else {

                 Log.e("TAG", "onRequestPermissionsResult 本次拒绝");

            }

}

}

}

/**

* 检查是否有某个权限

* @param context    context

* @param permission 权限

* @return true means has

*/

public static boolean hasPermission(Context context, String permission) {

return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;

}

Ⅲ 安卓权限控制指南

早期的 Android 系统没有现在这么多权限控制设定,管理功能也较不完善(其实是因为当时软件申请的权限也没有现在这么过分)。

在 Android 4.0 中,谷歌对权限系统进行了改进,于是再经过各大手机厂商的优化,每个国内定制系统就有了如今的权限管理功能。

权限管理,各大品牌其实差不多。

就我用过的几个品牌来讲,华为的权限管理最好,小米其次,OPPO 最差。

当然,这里的“差”是相对的,相对于原生 Android 系统来说,这些厂商的权限管理做的都很好。

(其实是因为 Google Play 的审核比较严格,上架的软件几乎都很克制)

所以,如果你要买新手机,在预算充足的情况下,选华为吧。不只是因为技术很牛,可定制性上也很好。

目前,安卓系统的权限主要分为以下几类:

这里,重点解释一下某些权限的用途。

获取 IMEI 码:很多应用都会申请这一权限, 读取手机的唯一识别码 (估计是用于用户的身份验证和判断多开)

存储:这里指的是 内置存储的读写权限 ,不包含系统 Android/data 文件夹下的应用私有文件夹,如果这些应用需要在根目录下存储数据,则必须拥有该权限。

读取位置信息: 只有在已经开启位置信息开关时,应用才能读取该信息 。这项权限不包含加速度计等传感器。

读取已安装应用列表: 允许应用读取已经安装的软件 ,一些应用中让用户选择其它应用的功能就是这样实现的。

身体传感器:允许应用使用诸如 计步器 等传感器。这可以实现计步功能。

运动数据:也可以实现计步功能,但这项权限是 依赖系统自带的计步算法 实现的,这也是有些计步软件的数据和其它软件数据不同的原因。

创建快捷方式:你在手机主屏上看到的 APP 图标就属于快捷方式,但这是系统在应用安装完成后自动创建的。这项权限允许应用 主动创建快捷方式 (比如微信小程序的图标和的“写文章”按钮)。

悬浮窗:微信视频聊天时切换到其它应用或主屏,这就是悬浮窗。但输入法不属于悬浮窗。

忽略电池优化:在 Android 6.0 以上系统中,有一种成为 Doze 模式的省电策略。在这种模式下,应用的联网将被禁止,直到下一个窗口或接收到 Google 高优先级推送(需要开发者和网络环境支持)。该权限允许应用在这种模式下连接网络。

是否授予软件相应的权限,取决于该软件的功能和你的需要。

例如,在导航软件中,获取位置信息是一项核心权限,但在效率软件中并不是。

对于所有软件,都建议启用“获取 IMEI 码”权限 ,否则会给开发者带来不便,也会影响用户体验(国内的一些软件甚至会在启动时进行检查,如该权限未开启则不能使用软件)。

建议对所有软件关闭“拨打电话”和除“存储”以外的所有操作类权限(考虑到可能会有恶意软件利用这些权限进行扣费)。

建议关闭除“获取位置信息”和“读取已安装应用列表”以外的所有读取类权限( 注意:关闭“读取短信”权限会导致部分应用无法自动填充短信验证码,但考虑到国内 ROM 对此都有一定优化,故不建议开启该权限

对于位置信息权限,我建议以下软件保持开启:

其它软件要求位置信息权限的,一律拒绝(有些软件失去此权限可能不能正常运行,视情况而定)

至于“读取已安装应用列表”权限,凡是不需要获取其它软件名称的,都可以拒绝此权限。

摄像头和录音权限比较好判断,凡是软件需要这些功能的,都应该允许,否则拒绝即可。

身体传感器和运动数据权限除计步软件外均选择拒绝。

创建快捷方式权限,目前我打开的软件只有一个:com.tencent.mm 包名,slogan 是“生活方式”,启动界面是月亮的那个国民级应用。

悬浮窗权限,一部分辅助类软件需要打开,比如手机管家和绿色守护,以及前面提到的那个国民级应用的视频悬浮窗。

至于开机自启动等关于后台省电的权限,请看下期......

Ⅳ android6.0权限拒绝后怎么处理

拒绝后,提示框提示权限被拒,然后两个选项:赋予权限->弹出权限提醒 不赋予权限->退出应用

Ⅳ Android带权限的操作,怎么判断是否被拒绝

Android带权限的操作,判断是否被拒绝,可以使用AppOpsManager 这个类提供的方法来判断,代码如下:
/*
* 检查某项权限是否被允许还是拒绝
*
* @param context
* @param op
* 权限代码
* @return 1为拒绝,0为允许
*/
@TargetApi(19)
private int checkOp(Context context, int op) {
final int version = Build.VERSION.SDK_INT;
if (version >= 19) {
try {
AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
Method dispatchMethod = AppOpsManager.class.getMethod(
"checkOp", new Class[] { int.class, int.class,
String.class });
int mode = (Integer) dispatchMethod.invoke(
appOpsManager,
new Object[] { op, Binder.getCallingUid(),
context.getPackageName() });
return mode;
} catch (Exception e) {
e.printStackTrace();
}
}
return -1;
} 望采纳~ 谢谢!

Ⅵ 判断android用户拒绝了某项权限这个问题您解决了吗

判断android用户拒绝了某项权限这个问题您解决了吗 源码中被用来检查和请求权限的方法分别是Activity的checkSelfPermission和requestPermissions。这些方法api23引入,如下代码:
private static final String TAG = "Contacts"; private void insertDummyContact() { Two operations are needed to insert a new contact. ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(2); First, set up a new raw contact. ContentProviderOperation.Builder op = ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null); operations.add(op.build()); Next, set the name for the contact. op = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "__DUMMY CONTACT from runtime permissions sample"); operations.add(op.build()); Apply the operations. ContentResolver resolver = getContentResolver(); try { resolver.applyBatch(ContactsContract.AUTHORITY, operations); } catch (RemoteException e) { Log.d(TAG, "Could not add a new contact: " + e.getMessage()); } catch (OperationApplicationException e) { Log.d(TAG, "Could not add a new contact: " + e.getMessage()); } }

支付权限检查失败 这个问题解决了吗
貌似微信刷卡支付 是微信服务号的? 具体有个区分 你去官方查下 在API的代码中 跟权限相关的官方返回只有NOAUTH: 商户无权限 支付确认失败 商户没有开通被扫支付权限 请开通商户号权限。

本文是关于支付宝接口接入时权限验证失败sign和mysign不等问题的解决方案,本来是几天前遇到的问题,解决了一直没时间来整理,在忙公司的项目和自己的一个虚拟空间的网站(:bosstoy.),在做支付宝接入的一些代码,之前也做过,但这一次遇到的问题是最彻底的,网上关于sign和mysign的文章蛮多,但情况也很多,非常零散,我根据网上的这些文章记录的内容和自己遇到的问题作了一个整理,记录下来,方便以后查阅,同时也希望能有同样问题的朋友可以解决掉这个问题。
sign和mysign不等的问题,根据官方提供的解决方案,需要从以下方面去检查,以下引用自官方原文:
通知返回时,支付宝返回给商家网站众多信息中,包含一个签名结果(sign),商家对其他所有信息进行加密签名后会得到一个签名结果(mysign),如果要验证接口其有效性,需要把sign与mysign做比较,在MD5加密中,是做相等校验。
而出现不等的原因是:
安全校验码没有填写或填写不正确、请求时的参数格式不正确(如:有带自定义参数等)、编码格式混乱等。
解决方法:
1、检查安全校验码(参数key)是否有填写,且没有空格,是否是32位字符串
2、检查请求参数show_url、return_url、notify_url是否有带自定义参数,去掉自定义参数,
:xxx./alipay/return_url.asp?id=123
?id=123,“?”以后带的参数都是自定义参数
3、 编码格式乱码。检查乱码的方法,可用写日志函数(log_result)来记录中文部分的数据是否乱码。如果乱码则确定是编码格式设置不一致,导致乱码。 具体请检查编码格式参数input_charset、页面属性编码、网站项目整体编码等,确保传递数据时没有乱码。
原文网址::help.alipay./support/help_detail.htm?help_id=243094
官方原文对于这个问题出现的原因也做了解释和出了相应的解决方案,但因为比较精炼,没有更详细的描述。往往还不能直接解决掉问题。比如这里提到的参数,是否带有自定义参数,我能确认没有定义自定义参数传出去,但最终检查出问题的原因还是因为传回的消息数组里面含有了一个多余的参数导致sign和mysign不等,这个多余的参数是__URL__,分析这个参数还是因为thinkphp框架自己再处理提交的时候传出去的,在代码里面过滤掉这个参数sign和mysign就正常了。
在alipay_function.php修改以下代码。红色部分就是我自定义的参数,过滤掉就好了
/**除去数组中的空值和签名参数
*$parameter 签名参数组
*return 去掉空值与签名参数后的新签名参数组
*/
function para_filter($parameter) {
$para = array();
while (list ($key, $val) = each ($parameter)) {
if($key == “sign” || $key == “sign_type” || $val == “” || $key == ‘__URL__’ )continue;
else $para[$key] = $parameter[$key];
}
return $para;
}
附正常的支付接口返回的参数列表,大家可以作一个参数比较,方便检查:
执行日期:20120619143609responseTxt=truenotify_url_log:sign=&mysign=,buyer_email=xx@163.&buyer_id=2088702249568542&exterface=create_direct_pay_by_user&is_suess=T¬ify_id=RqPnCoPT3K9/¬ify_time=2011-10-11 17:48:46¬ify_type=trade_status_sync&out_trade_no=ai-20-1318325559&payment_type=1&seller_email=xxo@gmail.& seller_id=2088002118761435&subject=充值&total_fee=0.01& trade_no=2011101140268254&trade_status=TRADE_SUCCESS&sign=&sign_type=MD5
在解决问题的过程中,还看到很多其他的情况导致sign和mysign不等,大家可以对比着看一下:
第一种情况:由于编码导致中文传回是乱码的情况导致sign和mysign不等。可参考这篇文章的案例
:imlqw./322.
第二种情况:由于post和get提交的问题导致sign和mysign不等,可参考以下文章:
:my.oschina./u/214582/blog/52140
第三种情况:由于官方提供的paraFilter方法bug问题导致sign和mysign不等,可参考一下文章:
:.alipay./read-htm-tid-10244623-page-e.
第四种情况:由于参数问题导致的sign和mysign不等的情况。在这里再说明一下,前面三种是在遇到sign和mysign不等的时候查阅到的一些其他情况,我试验过上面的方法,但都不是因为这些原因引起的,我的sign个mysign不等是因为thinkphp框架在提交信息的时候自动加入了参数造成的问题。大家在检查参数的时候一定要考虑到框架的影响。
这个问题你解决了吗?解决了教我下
问题补充:现在的苹果电脑可以装双系统了,我说的语音问题是XP状态下的,这个我知道,看看XP下的QQ不能解决 解决得靠腾讯软件对mac系统的支持度了
这个问题你解决了吗?
解决了,win7升级就好了,是s不太兼容
您这个问题解决了吗?真诚求教!
链接是什么?
as与js通讯这个问题你解决了吗?
用stageWebView扩展类 stageWebViewBridge 就可以了
这个电话您拒绝了吗?
作为公司的负责人或采购,我们每天不知道要接多少电话,其中不乏也有一些成交的,还有一些潜在的,现时不是很需要但谈话谈得比较来得,也会感兴趣的去听而且会记录联系方式、索要资料,有些只是会耐心地听下去,还有一些会直接拒绝,作为当事人我把自己拒绝电话的感受写下来,第一是提醒自己,在给客户打电话时不可犯的错误,第二是希望能给经常通过电话做销售的朋友们提个醒。第三更希望大家能发表一下意见,将您平时拒绝电话的原因写下来,让我们更多的销售朋友们看到、读到、领悟到,起到既减少接听烦人电话的作用,同时又能帮助销售朋友们提高电话业务的成功率。
1、推销和我公司产品、业务不相干的会遭受拒绝;
4、说话拖长音调、嗲声嗲语的、故意套近乎的会遭受拒绝;
5、说话躲躲闪闪的会遭受拒绝;
6、注意力不集中的、毫无表情的电话会遭受拒绝;
7、不直接说明来意,绕着圈子说话,让我反复去问才回答的遭受拒绝;
8、表明我们不需要此产品后还反复打电话的遭受拒绝;
9、第一次打电话就要求马上来我公司面谈的多数会拒绝;
珍惜你的每一次通话,珍惜你的话费支出。不要把你的电话当成是免费电话!
希望朋友们打电话开心!接电话也开心!
谢谢您帮我解决了这个问题!
9:bac
您好 您的问题解决了吗?我也遇到了这个问题
你好,很高兴为你解答
你的问题表达不清楚
你遇到了什么问题需要解决呢?
建议补充完整问题
或是重新提问
满意请采纳。

Ⅶ 判断android用户拒绝了某项权限这个问题您解决了吗

源码中被用来检查和请求权限的方法分别是Activity的checkSelfPermission和requestPermissions。这些方法api23引入,如下代码:

java">privatestaticfinalStringTAG="Contacts";
privatevoidinsertDummyContact(){
//.
ArrayList<ContentProviderOperation>operations=newArrayList<ContentProviderOperation>(2);

//First,setupanewrawcontact.
ContentProviderOperation.Builderop=
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME,null);
operations.add(op.build());

//Next,setthenameforthecontact.
op=ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
"__");
operations.add(op.build());

//Applytheoperations.
ContentResolverresolver=getContentResolver();
try{
resolver.applyBatch(ContactsContract.AUTHORITY,operations);
}catch(RemoteExceptione){
Log.d(TAG,"Couldnotaddanewcontact:"+e.getMessage());
}catch(){
Log.d(TAG,"Couldnotaddanewcontact:"+e.getMessage());
}
}

Ⅷ 如何判断android用户拒绝了某项权限

Android框架包含了对各种Camera以及其上可用的Camera功能的支持,它允许你在应用程序中抓拍照片和视频。
注意事项
在开启应用程序使用Android设备上的Camera功能之前,要考虑一些打算如何使用这些硬件功能的问题:
1. Camera需求:要考虑应用程序是否必须要运行在有Camera的设备上,如果必须,就要在应用程序的清单中声明Camera需求;
2. 快照或定制Camera:应用程序准备如何使用Camera?是只对抓拍或视频剪辑感兴趣?还是要应用程序提供使用Camera的新方法?对于抓拍或剪辑,要考虑使用既存的Camera应用程序。对于开发定制化的Camera功能,请看下文的“构建Camera应用程序”
基础
Android框架通过Camera API或Camera Intent来支持拍照和录像,以下是相关的类:
Camera
这个类是控制设备Camera的主API。在构建一个Camera应用程序时,它被用于拍照或录像。
SurfaceView
这个类用于向用户实时的展现Camera的预览。
MediaRecorder
这个类用于记录来自Camera的视频
Intent
MediaStore.ACTION_IMAGE_CAPTURE或MediaStore.ACTION_VIDEO_CAPTURE类型的Intent动作被用于不直接使用Camera对象来拍照或录像。
清单声明
在开始使用Camera API开发应用程序之前,要确保清单文件已经有了适当的声明,以允许使用Camera硬件和其他相关的功能。
1. Camera权限:应用程序必须申请使用设备Camera的权限。
<uses-permissionandroid:name="android.permission.CAMERA"/>
注意:如果通过Intent来使用Camera,应用程序就不需要申请这个权限。
2. Camera功能:应用程序还必须要声明打算使用的Camera功能,例如:
<uses-featureandroid:name="android.hardware.camera"/>
把Camera功能添加到应用程序的清单中,会让Google Play防止把程序安装到不包含Camera或不支持你所需要的Camera功能的设备上。关于如何使用基于功能过滤的Google Play,请看Google Play和基于功能的过滤
如果应用程序能够使用Camera或正确的操作Camera功能,但却不需要它,那么就应该在清单中指定android:required属性,并把属性值设置为false:
<uses-feature android:name="android.hardware.camera" android:required="false" />

3. 存储权限:如果应用程序要把图片或视频保存到设备的外部存储器上(如SD卡),就必须在清单中指定这个权限:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

4. 音频录音权限:对于视频采集的音频录音,应用程序必须要申请音频采集权限:
<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>

5. 位置定位权限:如果应用程序要给图片标记GPS位置信息,就必须申请位置定位权限:
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
关于获得用户位置的更多信息,请看“定位策略”
使用既存的Camera应用
在应用程序中不需要太多的额外代码就可以快速的开启拍照或录像的方法是:使用Intent来调用一个既存的Android Camera应用程序。一个Camera Intent能够通过既存的Camera应用程序和它返回给应用程序的播放控制来申请采集一张照片或一段视频。本节会向你展示如何使用这项技术来采集一张图片或一段视频。
调用Camera Intent的过程会遵循以下这些大概的步骤:
1. 编写一个Camera Intent:创建一个申请图片或视频的Intent对象,使用以下Intent类型之一:
MediaStore.ACTION_IMAGE_CAPTURE:从一个既存的Camera应用中申请图片功能的Intent动作类型;
MediaStore.ACTION_VIDEO_CAPTURE:从一个既存的Camera应用中申请视频功能的Intent动作类型。
2. 启动Camera的Intent:使用startActivityForResult()方法来执行Camera的Intent。Intent启动后,该Camera应用程序的用户界面会显示在屏幕上,并且用户能够拍照或录像;
3. 接收Intent的结果:在你的应用程序中建立一个onActivityResult()方法来接收来自Camera Intent的回调和数据。当用户完成成拍照或录像(或者是取消操作),系统会调用这个方法。
图像采集Intent
使用Camera Intent来采集图像是你的应用程序用最少的代码来拍照的快捷方式。一个图片采集Intent能够包含以下额外的信息:
MediaStore.EXTRA_OUTPUT:这个设置需要一个指定了保存图片路径和文件名的Uri对象。这个设置是可选,但强烈推荐使用。如果不指定这个值,Camera应用程序会用默认的名称把采集到的图片保存到默认的位置,这些默认值在Intent.getData()方法的返回字段中指定。
以下示例演示了如何构建一个图片采集Intent,并执行它。示例中GetOutputMediaFileUri()方法引用了下面“保存媒体文件”一节中的示例代码:
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private Uri fileUri;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
startActivityResult()方法执行完成后,用户就会看到Camera应用程序的界面。用户完成拍照(或取消操作)之后,用户界面就会返回到你的应用程序中,并且你必须监听onActivityResult()方法来接收Intent的结果,并继续你的应用程序的执行。
视频采集Intent
使用Camera Intent采集视频是让你的应用程序能够用最少的代码来录像的一中快捷方式。视频采集Intent能够包含以下额外信息:
MediaStore.EXTRA_OUTPUT:这个设置要求用一个URI来指定保存视频的路径和文件名。虽然它是可选的,但强烈推荐使用这个设置。如果没有指定这个设置,那么Camera应用程序会把采集到的视频用默认的名称保存到默认的位置,默认的设置是在Intent的Intent.getData()方法域中返回的。
MediaStore.EXTRA_VIDEO_QUALITY:这个值的范围是0~1,0的时候质量最差且文件最小,1的时候质量最高且文件最大。
MediaStore.EXTRA_DURATION_LIMIT:这个值以秒为单位,显示视频采集的时长。
MediaStore.EXTRA_SIZE_LIMIT:这个值以字节为单位,限制视频采集的文件大小。
下面的示例演示了如何构造一个视频采集的Intent,并执行它。这个例子中的getOutputMediaFileUri()方法引用了下文的“保存媒体文件”中的示例代码:
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
private Uri fileUri;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//create new Intent
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); // create a file to save the video
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high

// start the Video Capture Intent
startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
}
当startActivityForResult()方法被执行时,用户就会看到一个可编辑的Camera应用程序界面。在用户完成录像(或取消操作)之后,该用户界面就会返回到你的应用程序中,并且你必须监听onActivityResult()方法来接收Intent的结果,并继续执行你的应用程序。
接收Camera Intent结果
一旦你构建并执行了一个图片或视频的Camera Intent,那么就必须要配置你应用程序来接收Intent的结果。本节向你展示了如何监听来自Camera Intent的回调,以便应用程序能够对采集到的图片或视频做进一步的处理。
为了接收Intent的结果,必须在启动Intent的那个Activity中重写onActivityResult()方法。下面的示例演示了如何重写onActivityResult()方法来采集图片Camera Intent或视频Camera Intent的返回结果:
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Toast.makeText(this, "Image saved to:\n" +
data.getData(), Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
} else {
// Image capture failed, advise user
}
}

if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Video captured and saved to fileUri specified in the Intent
Toast.makeText(this, "Video saved to:\n" +
data.getData(), Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the video capture
} else {
// Video capture failed, advise user
}
}
}
一旦Activity接收到一个成功的结果,那么你的应用程序就可以访问指定位置中的被采集的图片或视频。

Ⅸ 安卓请求权限

有时候我们的应用需要读写sd卡,就需要android.permission.WRITE_EXTERNAL_STORAGE权限,但是它属于危险型权限。光在Manifest中配置还不够,你还需要运行时请求去用它们。
以下就以Mainfest.permission.WRITE_EXTERNAL_STORAGE为例,

1)检测是否拥有权限

2)如果没有权限就请求权限

requestPermission()是个异步请求方法,调用它之后,Android会弹出系统权限授权对话框要求用户反馈。
为响应用户操作,还需要重写onRequestPermissionResult()响应方法,用户点击 允许 或 拒绝 按钮后,Android就会调用这个方法。

然后我们在这个方法里检测是否拥有权限,如果有权限,就...。

如果你点击了 允许 按钮给予权限,除非卸载或关闭权限,应用会一直拥有该权限。如果选了拒绝,应用的授权只是暂时被否。下次要获取读写文件的话,可以继续用requestPermission()来请求权限。

热点内容
外贴算法 发布:2025-05-17 16:13:34 浏览:387
多出口ip服务器 发布:2025-05-17 16:04:50 浏览:659
双指针算法 发布:2025-05-17 16:04:04 浏览:702
媒体采访问答 发布:2025-05-17 15:59:44 浏览:690
androidstudiojni 发布:2025-05-17 15:59:42 浏览:165
唱吧上传伴奏歌词 发布:2025-05-17 15:53:29 浏览:862
5g服务器怎么填写 发布:2025-05-17 15:49:39 浏览:314
c语言二级操作题 发布:2025-05-17 15:48:45 浏览:376
手机录音机在哪个文件夹 发布:2025-05-17 15:43:37 浏览:49
我的世界手机版服务器如何给管理 发布:2025-05-17 15:34:06 浏览:831