22
33import android .app .Activity ;
44import android .app .ActivityManager ;
5+ import android .app .AppOpsManager ;
56import android .app .Notification ;
7+ import android .app .NotificationManager ;
68import android .content .BroadcastReceiver ;
79import android .content .ComponentName ;
810import android .content .Context ;
911import android .content .Intent ;
12+ import android .content .pm .ApplicationInfo ;
13+ import android .os .Build ;
1014import android .os .Bundle ;
1115import android .util .SparseArray ;
1216
2630
2731import org .json .JSONObject ;
2832
33+ import java .lang .reflect .Field ;
34+ import java .lang .reflect .InvocationTargetException ;
35+ import java .lang .reflect .Method ;
2936import java .text .SimpleDateFormat ;
3037import java .util .Date ;
3138import java .util .HashSet ;
@@ -123,6 +130,7 @@ public void getInfo(Callback successCallback) {
123130 successCallback .invoke (map );
124131 }
125132
133+
126134 @ ReactMethod
127135 public void stopPush () {
128136 mContext = getCurrentActivity ();
@@ -131,6 +139,13 @@ public void stopPush() {
131139 Logger .toast (mContext , "Stop push success" );
132140 }
133141
142+ @ ReactMethod
143+ public void hasPermission (Callback callback ) {
144+ callback .invoke (hasPermission ("OP_POST_NOTIFICATION" ));
145+ }
146+
147+
148+
134149 @ ReactMethod
135150 public void resumePush () {
136151 mContext = getCurrentActivity ();
@@ -760,4 +775,43 @@ public void finishActivity() {
760775 }
761776
762777 }
778+
779+ private boolean hasPermission (String appOpsServiceId ) {
780+
781+ Context context = getCurrentActivity ().getApplicationContext ();
782+ if (Build .VERSION .SDK_INT >= 24 ) {
783+ NotificationManager mNotificationManager = (NotificationManager ) context .getSystemService (
784+ Context .NOTIFICATION_SERVICE );
785+ return mNotificationManager .areNotificationsEnabled ();
786+ }else if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .KITKAT ){
787+ AppOpsManager mAppOps = (AppOpsManager ) context .getSystemService (Context .APP_OPS_SERVICE );
788+ ApplicationInfo appInfo = context .getApplicationInfo ();
789+
790+ String pkg = context .getPackageName ();
791+ int uid = appInfo .uid ;
792+ Class appOpsClazz ;
793+
794+ try {
795+ appOpsClazz = Class .forName (AppOpsManager .class .getName ());
796+ Method checkOpNoThrowMethod = appOpsClazz .getMethod ("checkOpNoThrow" , Integer .TYPE , Integer .TYPE ,
797+ String .class );
798+ Field opValue = appOpsClazz .getDeclaredField (appOpsServiceId );
799+ int value = opValue .getInt (Integer .class );
800+ Object result = checkOpNoThrowMethod .invoke (mAppOps , value , uid , pkg );
801+ return Integer .parseInt (result .toString ()) == AppOpsManager .MODE_ALLOWED ;
802+ } catch (InvocationTargetException e ) {
803+ e .printStackTrace ();
804+ } catch (IllegalAccessException e ) {
805+ e .printStackTrace ();
806+ } catch (NoSuchMethodException e ) {
807+ e .printStackTrace ();
808+ } catch (NoSuchFieldException e ) {
809+ e .printStackTrace ();
810+ } catch (ClassNotFoundException e ) {
811+ e .printStackTrace ();
812+ }
813+ }
814+
815+ return false ;
816+ }
763817}
0 commit comments