如何为native native实现PermissionAwareActivity?

时间:2017-07-06 23:31:22

标签: java android react-native

关于本机的PermissionAwareActivity反应的文档非常少,我需要实现Android API 23+的方法,以允许用户接受/拒绝蓝牙权限。

import android.support.v4.app.ActivityCompat; 
import com.facebook.react.modules.core.PermissionAwareActivity;
import com.facebook.react.modules.core.PermissionListener;
public class MainActivity extends ExponentActivity implements PermissionAwareActivity {

  private PermissionListener mPermissionListener;

  @Override
  public int checkPermission(String permission, int pid, int uid) {
    return PackageManager.PERMISSION_GRANTED;
  }

  @Override
  public  int checkSelfPermission(String permission) {
    return PackageManager.PERMISSION_GRANTED;
  }

  @Override
  public void requestPermissions(String[] permissions, int requestCode, PermissionListener listener) {
    mPermissionListener = listener;
    ActivityCompat.requestPermissions(this, permissions, requestCode);
  }


  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    // callback to native module
    mPermissionListener.onRequestPermissionsResult(requestCode, permissions, grantResults);
  }
  ...

我不确定我是如何实现这些方法的。任何帮助表示赞赏。即使有人可以指出我找不到的文档或资源。

3 个答案:

答案 0 :(得分:0)

我在React-Native source中找到了PermissionAwareActivity的默认实现。

但是,该文件中混入了许多其他样板代码,因此我不确定实现需要哪些特定部分。

更好的选择似乎是让您的MainActivity继承自ReactActivity。看来您是从ExponentActivity继承的。我不确定这是什么,但是如果它是您可以控制的自定义Activity子类,则应该能够继承自ReactActivity

答案 1 :(得分:0)

在现有Android应用程序中添加本机响应时,我遇到了这个问题。通过在ReactActivity.java中实现以下方法来解决此问题

@Override
public void requestPermissions(
        String[] permissions, int requestCode, PermissionListener listener) {
    mDelegate.requestPermissions(permissions, requestCode, listener);
}


protected @Nullable String getMainComponentName() {
        return null;
    }

@Override
public void onRequestPermissionsResult(
        int requestCode, String[] permissions, int[] grantResults) {
    mDelegate.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

导入关注

import com.facebook.react.modules.core.PermissionAwareActivity;
import com.facebook.react.modules.core.PermissionListener;
import androidx.annotation.Nullable;

对此进行更改

implements DefaultHardwareBackBtnHandler

对此

implements DefaultHardwareBackBtnHandler, PermissionAwareActivity

有关更多详细信息,请参见ReactActivity.java官方仓库

答案 2 :(得分:0)

如果您使用的不是源自我的ReactActivity的活动,并且需要了解权限,则将以下内容添加到您的活动中:

import com.facebook.react.modules.core.PermissionAwareActivity;
import com.facebook.react.modules.core.PermissionListener;

....

public class MyActivity extends Activity implements PermissionAwareActivity {
    private PermissionListener permissionListener;

   ....


       @TargetApi(Build.VERSION_CODES.M)
    public void requestPermissions(String[] permissions, int requestCode, PermissionListener listener) {
        permissionListener = listener;
        requestPermissions(permissions, requestCode);
    }

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (permissionListener != null && permissionListener.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
            permissionListener = null;
        }
    }
}

我从here获得了代码。建议here