关于本机的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);
}
...
我不确定我是如何实现这些方法的。任何帮助表示赞赏。即使有人可以指出我找不到的文档或资源。
答案 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;
}
}
}