react-native 中呼叫android的一些功能
阿新 • • 發佈:2020-12-29
技術標籤:react-nativereact-nativeandroid許可權通知
1. 獲取裝置通知許可權
react-native
中的 PermissionsAndroid
能夠獲取android裝置的部分許可權資訊,但是無法獲取通知許可權。所以需要在android專案中增加獲取許可權的操作,在js程式碼中去呼叫。
在android/app/src/main/java
目錄下,新建一個 rn.plugin/common/CommonModule
,用於呼叫android功能:
package rn.plugin.common;
import androidx.core.app.NotificationManagerCompat;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
public class CommonModule extends ReactContextBaseJavaModule
{
public CommonModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "Common";
}
protected ReactApplicationContext getReactContext()
{
return this.getReactApplicationContext();
}
@ReactMethod
public void getSystemNoticeStatus(Promise promise) {
promise.resolve(NotificationManagerCompat.from(getReactContext()).areNotificationsEnabled());
}
}
註冊: rn.plugin/ReactPackage.java
package rn.plugin;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import rn.plugin.common.CommonModule;
public class ReactPackage implements ReactPackage
{
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext)
{
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext)
{
List<NativeModule> modules = new ArrayList<>();
modules.add(new CommonModule(reactContext));
return modules;
}
}
android/app/src/main/java/com/rjjk_doctor/MainApplication.java
中註冊:
import rn.plugin.ReactPackage;
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new ReactPackage(),
);
}
js中呼叫:
// 獲取推送許可權
const getPermissionPush = async () => {
if (Platform.OS !== 'ios') {
const grented = await NativeModules.Common.getSystemNoticeStatus()
if (!grented) {
// 未開許可權
return false
}
}
return true
}
2. android 在app開啟的時候清除所有通知欄的資訊
在檔案android/app/src/main/java/com/rjjk_doctor/MainActivity.java
中新增android專案每次顯示的onResume
生命週期中,用於呼叫清除所有通知
import android.app.NotificationManager;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected void onResume() {
super.onResume();
NotificationManager nMgr = (NotificationManager) getSystemService(this.NOTIFICATION_SERVICE);
nMgr.cancelAll();
}
}