1. 程式人生 > 其它 >react-native 中呼叫android的一些功能

react-native 中呼叫android的一些功能

技術標籤: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();
    }
}