PermissionKit 权限申请库 -- 一句代码帮你申请动态权限

21 篇文章 0 订阅

PermissionKit 权限申请库

用来快速方便实现 6.0+ 的权限授权,

GitHub地址:https://github.com/gybin02/PermissionKit

这个库可以节省不少代码量和时间

流程

  • 检查是否拥有权限-> 有权限 -> 回调权限申请成功
  • 没有权限是否需要弹窗请求-> 不需要 -> 是否是被设置为永不提醒
  • 需要弹窗请求,监听是否点击确认-> 未点击 -> 权限申请被拒绝
  • 点击确认主动申请权限,回调结果onRequestPermissionsResult
  • 回调结果判断权限是否申请成功 -> 失败回调|成功回调

Gradle usage

  • TODO,打包发布

How to Use

  1. 注册监听
  //在Activity的系统回调里面注册 PermissionsManager
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        PermissionsManager.getInstance().notifyPermissionsChange(permissions, grantResults);
    }
  1. 申请监听
//单例实现
PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult(this,
    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, new PermissionsResultAction() {

    @Override
    public void onGranted() {
        writeToStorage();
    }

    @Override
    public void onDenied(String permission) {
        Toast.makeText(MainActivity.this, 
                      "Sorry, we need the Storage Permission to do that", 
                      Toast.LENGTH_SHORT).show();
    }
});

总结

  1. 减少很多代码量
  2. 代码比较清晰,单例调用,回调返回
  3. 耦合度低,比较少的侵入性
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是 OpenHarmony 写一段 MQTT 连接代码的示例: ``` #include <oh_mqtt_client.h> // MQTT 连接配置 oh_mqtt_connect_params_t connect_params = { .client_id = "OH_MQTT_CLIENT", .username = "user", .password = "password", .host = "127.0.0.1", .port = 1883, .keepalive = 60 }; // MQTT 连接回调 oh_mqtt_conn_cb_t connect_cb = { .connect_success = on_connect_success, .connect_fail = on_connect_fail }; int main(void) { // 创建 MQTT 客户端 oh_mqtt_client_t* client = oh_mqtt_client_new(); if (client == NULL) { // 创建失败处理 } // 连接 MQTT 服务器 oh_mqtt_client_connect(client, &connect_params, &connect_cb); // 等待 MQTT 连接完成 oh_mqtt_client_wait(client); // 销毁 MQTT 客户端 oh_mqtt_client_free(client); return 0; } void on_connect_success(oh_mqtt_client_t* client) { // 连接成功处理 } void on_connect_fail(oh_mqtt_client_t* client, oh_mqtt_conn_status_t status) { // 连接失败处理 } ``` 请注意,以上代码仅是示例,您可能需要根据实际需求调整其中的参数。 ### 回答2: 使用OpenHarmony编写一个MQTT连接代码的例子如下: ```java import ohos.event.intentagent.IntentAgent; import ohos.rpc.IRemoteBroker; import ohos.rpc.MessageOption; import ohos.rpc.MessageParcel; import ohos.rpc.RemoteException; public class MqttClient implements IRemoteBroker { private static final int REQ_CODE_START_ACTIVITY = 1; private IntentAgent intentAgent; public MqttClient(IntentAgent intentAgent) { this.intentAgent = intentAgent; } public void connectMqttServer(String serverUri, String clientId, String topic) { IntentAgent myIntentAgent = IntentAgentHelper.getIntentAgent(); IntentAgent requestIntentAgent = IntentAgentHelper.getRequestIntentAgent(myIntentAgent); requestIntentAgent.setParam("serverUri", serverUri); requestIntentAgent.setParam("clientId", clientId); requestIntentAgent.setParam("topic", topic); try { myIntentAgent.startAbility(requestIntentAgent, REQ_CODE_START_ACTIVITY); } catch (RemoteException e) { e.printStackTrace(); } } @Override public IRemoteBroker queryLocalInterface(String descriptor) { return null; } @Override public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException { switch (code) { case REQ_CODE_START_ACTIVITY: String serverUri = data.readString(); String clientId = data.readString(); String topic = data.readString(); // 进行 MQTT 连接的操作 break; default: return false; } return true; } } public class IntentAgentHelper { static IntentAgent getIntentAgent() { // 创建一个 IntentAgent 对象 // ... return intentAgent; } static IntentAgent getRequestIntentAgent(IntentAgent intentAgent) { IntentAgent requestIntentAgent = new IntentAgent(); // 设置要启动的 Ability 的信息 // intentAgent 设置等... return requestIntentAgent; } } ``` 这是一个使用OpenHarmony编写的MqttClient类的示例,其中包含了连接到MQTT服务器的方法。该类通过IntentAgent与能够进行Mqtt连接的Ability进行通信。在连接Mqtt服务器的方法`connectMqttServer`中,我们创建了一个IntentAgent对象,并将要连接的服务器地址、客户端ID和订阅的主题作为参数传递给IntentAgent实例。然后,我们使用`startAbility`方法将这个IntentAgent发送给能够进行Mqtt连接的Ability。 在能够进行Mqtt连接的Ability中,我们通过重写`onRemoteRequest`方法来接收传递过来的参数。这里我们假设通过响应`REQ_CODE_START_ACTIVITY`来执行Mqtt连接的操作。在`onRemoteRequest`方法中,我们从传递过来的参数中获取到服务器地址、客户端ID和订阅的主题。然后,我们可以在这个方法中进行Mqtt连接的具体操作。 注意:以上代码仅为示例,实际上需要根据具体的OpenHarmony版本和MQTT进行更详细的实现。 ### 回答3: 使用OpenHarmony编写MQTT连接代码示例如下: ``` import ohos.eventhandler.EventHandler; import ohos.eventhandler.EventRunner; import ohos.eventhandler.InnerEvent; import ohos.rpc.*; import java.util.UUID; import java.util.concurrent.TimeoutException; import ohos.security.SystemPermission; import ohos.security.permission.PermissionKit; import ohos.sysability.samgr.SysAbilityManager; import ohos.sysability.samgr.SystemAbilityDefinition; import ohos.utils.zson.ZSONObject; import com.huawei.hiviewtunnel.HiViewEvent; import com.huawei.hms.networkengine.aidl.NetworkAdapterAgent; import com.huawei.hms.networkengine.aidl.IDnsMultiResolver; import com.huawei.hms.networkengine.aidl.IFoundationPrx; import com.huawei.hms.networkengine.aidl.IOnConnectionStateChangeListener; import com.huawei.hms.networkengine.aidl.OnDnsResovle; import com.huawei.hms.networkengine.aidl.OnPskConfig; import com.huawei.hms.networkengine.aidl.OnTcpEvent; import com.huawei.hms.networkengine.aidl.OnUdpEvent; // 创建MQTT连接的类 public class MqttClient { private static final String TAG = "MqttClient"; private NetworkAdapterAgent mAgent; private String mBrokerUrl; private String mClientId; private String mUserName; private String mPassword; // 构造函数 public MqttClient(String brokerUrl, String clientId, String userName, String password) { mBrokerUrl = brokerUrl; mClientId = clientId; mUserName = userName; mPassword = password; // 初始化网络代理 mAgent = getNetworkAdapterAgent(); } // 连接到MQTT服务器 public void connect() { try { // 创建MQTT连接 mAgent.createConnection(mBrokerUrl, mClientId, mUserName, mPassword, mConnectionStateListener, mHandler); } catch (Exception e) { e.printStackTrace(); } } // 断开与MQTT服务器的连接 public void disconnect() { try { // 断开MQTT连接 mAgent.disconnect(mConnectionStateListener); } catch (Exception e) { e.printStackTrace(); } } // 获取网络代理 private NetworkAdapterAgent getNetworkAdapterAgent() { int result = PermissionKit.checkPermission(SystemPermission.DISTRIBUTED_DATASYNC); if (result != PermissionKit.PERMISSION_GRANTED) { return null; } try { // 获取网络代理 Optional<NetworkAdapterAgent> agentOptional = SysAbilityManager.getSystemAbility( SystemAbilityDefinition.NET_WORK_ADAPTER_ABILITY_ID, NetworkAdapterAgent.class); return agentOptional.get(); } catch (SystemAbilityException e) { e.printStackTrace(); } return null; } // 连接状态监听器 private IOnConnectionStateChangeListener mConnectionStateListener = new IOnConnectionStateChangeListener.Stub() { @Override public void onTcpConnected(OnTcpEvent event) { // 连接到TCP服务器 HiViewEvent tcpEvent = new HiViewEvent(HiViewEvent.EventId.TCP_CONNECTED); // 解析事件数据 tcpEvent.putExtra("address", event.address); tcpEvent.putExtra("port", event.port); // 发送至HiTrace通道 HiViewEvent.send(tcpEvent); } @Override public void onMqttConnected(IFoundationPrx prx) { // 连接到MQTT服务器 HiViewEvent mqttEvent = new HiViewEvent(HiViewEvent.EventId.MQTT_CONNECTED); // 解析事件数据 mqttEvent.putExtra("clientId", mClientId); mqttEvent.putExtra("serverURI", mBrokerUrl); // 发送至HiTrace通道 HiViewEvent.send(mqttEvent); } }; // 异步事件处理器 private EventHandler mHandler = new EventHandler(EventRunner.getMainEventRunner()) { @Override protected void processEvent(InnerEvent event) { // 处理事件 } }; } ``` 以上是一个使用OpenHarmony编写的MQTT连接类的示例代码。你可以根据自己的需求进行修改和扩展。注意,在实际运行之前,请确保正确配置OpenHarmony的开发环境,并在编译和运行时添加所需的依赖项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值