android 封装权限

 

Dangerous permissions and permission groups(危险权限和权限组)

                

 

链接:权限库

PermissionManager

android 6.0权限兼容库

PermissionManager是一个对android6.0运行时申请权限的操作的封装,将重复调用的多个方法组合封装在一起,方便调用,简化代码和逻辑。PermissionManager的使用比较简单。大致就一下几个方法:

  • execute(Activity activity,String permission)
    • 解释:方法只需要传递Activity和permission2个参数,会执行完检查权限和请求权限的步骤。
  • execute(Activity activity,String... permissions)
    • 解释:这个方法可以一次传递多个权限,进行申请。
  • executeDialog(Activity activity,String permission,Builder builder)
    • 解释:这个方法是在权限拒绝后,再次进行申请时会弹出一个提示的dialog,给用户一个提示或解释。Builder参数是PermissionManager的一个内部类,目的是通过builder对象携带Dialog需要的数据。
  • onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults)
    • 解释:这个方法主要是在将Activity中的onRequestPermissionsResult回调方法中的参数传递到PermissionManager中,进行处理。
  • getGrantedInfo(String permission)
    • 解释:通过传递权限来判断是否授权,返回值boolean

 

eg:案例

在oncreate方法中调用initPermission()

private void initPermission() {
//同时申请多个权限
// PermissionManager.getInstance(getApplicationContext()).execute(this, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        //请求单个,显示对话框的方式
        PermissionManager.getInstance(getApplicationContext()).executeDialog(this, Manifest.permission.RECORD_AUDIO,
                PermissionManager.getInstance(getApplicationContext()).new Builder(this)
                        .setMessage("应用需要获取您的录音权限,是否授权?")
                        .setTitle(getString(R.string.app_name))
                        .setIcon(R.mipmap.ic_launcher)
                        .setOk("OK")
                        .setCancel("CANCEL"));
    }

 

在Activity的onRequestPermissionsResult()方法中

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    PermissionManager.getInstance(getApplicationContext()).onRequestPermissionsResult(requestCode, permissions, grantResults);
}

 

在需要使用到权限的代码之前做判断,如:

if (PermissionManager.getInstance(getApplicationContext()).getGrantedInfo(Manifest.permission.RECORD_AUDIO) ) {
    Toast.makeText(FirstActivity.this, "录音权限已经获取", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(FirstActivity.this, "你还没有获取录音权限", Toast.LENGTH_SHORT).show();
}

注意:在execute()和getGrantedInfo()方法使用的时候时机需要把握对,在execute()执行后申请权限,在onRequestPermissionsResult()方法中才获取最新的权限信息,再做处理。如果在此之前调用getGrantedInfo()可能拿不到正确的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android 使用RabbitMQ进行消息队列通信通常涉及创建一个客户端应用程序来发送、接收或管理消息。RabbitMQ是一个开源的消息代理或中间件,允许不同应用和服务之间通过发布/订阅模式或者点对点通信模型传递消息。 ### 集成过程 在Android中集成RabbitMQ大致分为以下几个步骤: 1. **添加依赖**: - 如果您正在使用Maven或其他构建工具,需要添加RabbitMQ客户端库到项目的依赖列表中。例如,在Android项目中,您可以将RabbitMQ库添加到`build.gradle`文件的`dependencies`部分。 ```groovy implementation 'com.rabbitmq:amqp-client:6.4.0' ``` 2. **设置连接**: - 创建一个新的RabbitMQ连接,并指定服务器地址、端口和其他参数。例如,如果您的RabbitMQ服务运行在本地主机上,默认端口5672,并使用guest用户和guest密码,则可以像下面这样初始化连接: ```java ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setUsername("guest"); factory.setPassword("guest"); Connection connection = factory.newConnection(); ``` 3. **创建频道**: - 在建立连接后,创建一个通道(channel),用于实际的生产者和消费者操作。 ```java Channel channel = connection.createChannel(); ``` 4. **声明交换机和队列**: - 根据您的需求,声明一个或多个交换机和队列。这包括配置队列的持久化、自动删除以及分配策略等。 ```java channel.queueDeclare(QUEUE_NAME, true, false, false, null); channel.exchangeDeclare(EXCHANGE_NAME, "direct", true); // 绑定队列到交换机 channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY); ``` 5. **发送和接收消息**: - 生产者可以向队列发送消息,而消费者可以从队列中获取消息。 ```java String message = "Hello from Android!"; BasicProperties props = new BasicProperties.Builder().setContentEncoding("UTF-8").build(); channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, props, message.getBytes("UTF-8")); // 消费者示例 channel.basicConsume(QUEUE_NAME, true, (consumerTag, delivery) -> { String messageBody = new String(delivery.getBody(), StandardCharsets.UTF_8); System.out.println(messageBody); }, consumerTag -> {}); ``` ### 安全性和性能考虑 - **认证和权限管理**:确保只允许授权的应用访问RabbitMQ资源。 - **日志记录和监控**:启用日志记录功能并监控消息流量和应用状态。 ### 实际应用场景 RabbitMQ在Android应用中的常见用途包括但不限于: - 跨进程通信:允许Android应用的不同组件或服务之间进行通信。 - 异步任务处理:例如后台数据同步、定时任务执行等。 - 消息通知系统:实现推送通知机制,增强用户体验。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值