Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android ¿ª·¢Õß±ØÖª±Ø»áµÄȨÏÞ¹ÜÀí֪ʶ
 
À´Ô´£º¼«¿ÍÍ·Ìõ ·¢²¼ÓÚ£º 2017-8-24
  2272  次浏览      27
 

µ¼Óï

±¾ÎÄÖ÷Òª½²½âÁËAndroid ȨÏÞ¹ÜÀí·½Ãæ¼¸¸öµã£º

Android ȨÏÞ±³¾°ÖªÊ¶£»

ȨÏÞ¼ì²é¼°È¨ÏÞ¼æÈÝ£»

Ìø×ªµ½app¹ÜÀíȨÏÞÒ³Ãæ

Ò»¡¢Android ȨÏÞ±³¾°ÖªÊ¶

Ìáµ½Android ȨÏÞ¹ÜÀí£¬ÒµÄÚÈËÊ¿¶¼ÖªµÀGoogle ÔÚAndroid 6.0ʱÌá³öÁËÔËÐÐʱȨÏÞ¹ÜÀí»úÖÆ£¬ÔÚAndroid 6.0֮ǰ£¬ËùÉêÇëµÄȨÏÞÖ»ÐèÒªÔÚAndroidManifest.xmlÁоپͿÉÒÔ£¬´Ó¶øÈÝÒ×µ¼ÖÂһЩ°²È«Òþ»¼£¬Òò´Ë£¬ÔÚAndroid 6.0 ʱ£¬Google ΪÁ˸üºÃµÄ±£»¤Óû§Òþ˽Ìá³öÁËеÄȨÏÞ¹ÜÀí»úÖÆ£¨¹ÙÍø £ºWorking with System Permissions£©£¬Í¬Ê±½«Æä·ÖΪÁ½´óÀࣺ

£¨1£©Normal Permissions

Normal Permissions Ò»°ã²»Éæ¼°Óû§Òþ˽£¬ÊDz»ÐèÒªÓû§½øÐÐÊÚȨµÄ£¬±ÈÈçÊÖ»úÕ𶯡¢·ÃÎÊÍøÂçµÈ£»

£¨2£©Dangerous Permission

Dangerous PermissionÒ»°ãÊÇÉæ¼°µ½Óû§Òþ˽µÄ£¬ÐèÒªÓû§½øÐÐÊÚȨ£¨¶¯Ì¬ÉêÇ룩£¬±ÈÈç¶ÁÈ¡SIM¿¨×´Ì¬¡¢·ÃÎÊͨѶ¼¡¢SD¿¨¶ÁдµÈ¡£

ͨ¹ý adb shell pm list permissions -d -g ¿ÉÒԲ鿴 Dangerous Permission £¨ÒÔȨÏÞ×éÐÎʽ£©

Dangerous Permission group

ÈçÉÏͼËùʾ £ºDangerous Permission Ò»°ãÒÔ Permission group ÐÎʽ´æÔÚ£¬Ö»Òª Permission groupÖÐijһ¸ö permission ±»Granted£¬ÔòÕû¸öPermission groupϵÄȨÏÞ¾ù±»Granted £¨Ä¿Ç°ÊÇÕâÑù£¬ÒÔºó¹æÔò˵²»¶¨»á±ä£©¡£

¶þ¡¢È¨ÏÞ¼ì²é¼°È¨ÏÞ¼æÈÝ

±¾½ÚÖ÷Òª½éÉܽéÉÜÈçºÎ½øÐÐȨÏÞ¼ì²é¼°È¨ÏÞ¼æÈÝ£¬Ö÷Òª·ÖΪÒÔϼ¸Àࣺ

£¨1£©targetSdkVersion>=23£¬ÖÕ¶ËÉ豸ÊÇ6.0£¨api 23£©ÒÔÉÏϵͳ£»

°²×°µÄʱºò²»»á»ñµÃȨÏÞ£¬ÔÚÔËÐÐʱÏòÓû§ÉêÇë¶ÔӦȨÏÞ¡£Õⲿ·ÖȨÏÞ¼ì²é±È½Ï¼òµ¥£¬²»É漰ȨÏÞ¼æÈÝ£¬Ê¹Óùٷ½·½°¸¾Í¿ÉÒÔ £¬Ê¹Óà Context : : checkSelfPermisson £¬½¨ÒéʹÓà ContextCompat : : checkSelfPermisson ¼ì²éȨÏÞ ¼´¿É £¬Ò»°ã¼ì²éÁ÷³Ì ÈçÏ£º

1.ÅжÏÊÇ·ñÓжÔӦȨÏÞ

£¨ ContextCompat : : checkSelfPermisson £©

2.ÅжÏÊÇ·ñÐèÒª½âÊͶÔӦȨÏÞÓÃ;£¨ ActivityCompat :: shouldShowRequestPermissionRationale £©

Èç¹ûÐèÒª½âÊÍ£¬ÔòÏÖʵ×Ô¶¨ÒåȨÏÞ½çÃæ¼´¿É

3.²»ÐèÒª½âÊ͵ϰ£¬Ö±½ÓÇëÇó¶ÔӦȨÏÞ

£¨ActivityCompat::requestPermissions£©

ÉÏÊöÇé¿ö½ÏΪ¼òµ¥£¬Ôڴ˲»ÔÙ׸Êö¡£

£¨2£©targetSdkVersion<23£¬ÖÕ¶ËÉ豸ÊÇ6.0£¨api 23£©ÒÔÉÏϵͳ£»

ʹÓõÄÊÇÀϵÄȨÏÞ»úÖÆ£¬ÔÚapp °²×°Ê±»áѯÎÊAndroidManifest.xmlÎļþÖеÄȨÏÞ£¬µ«ÊÇÓû§¿ÉÒÔÔÚÉèÖÃÁбíÖйرÕÏà¹ØÈ¨ÏÞ£¬ÕâÖÖÇé¿ö¿ÉÄÜ»á¶ÔappÕý³£ÔËÐÐÔì³ÉÒ»¶¨Ó°Ïì¡£

£¨3£© ÖÕ¶ËÉ豸ϵͳСÓÚ6.0£¨api 23£©

´ó¼Ò¿ÉÄÜÒªÎÊ£¬ÖÕ¶ËÉ豸ϵͳСÓÚ6.0Çé¿ö»¹ÐèÒª¿¼ÂÇÂ𣬿϶¨ÊÇÓõÄÀϵÄȨÏÞ¹ÜÀí»úÖÆ£¬ÔÚapp °²×°Ê±»áѯÎÊAndroidManifest.xmlÎļþÖеÄȨÏÞ£¬Óû§¹Ø±Õ²»ÁË£¬ÕæµÄÊÇÕâÑùÂ𠣿

´ð°¸ÊÇ·ñ¶¨µÄ£¬ÔÚʵ²âÖз¢ÏÖ£¬Ä¿Ç°Óв»ÉÙ¹ú²úRom ÊÖ»úÔÚ6.0֮ǰ¾ÍÓйرÕȨÏ޵Ŀª¹Ø¡£ÕâÖÖÇé¿öÒ²ÊÇÎÒÃǼæÈݵĶÔÏó¡£

ÏÂÃæ½«»áÒÔ×Ô¼º¿ª·¢¹ý³ÌÖÐÓöµ½µÄÎÊÌâ½øÐÐÕ¹¿ª £¬Ä¿Ç°Æó¶ìFMÖ§³ÖÃâÁ÷ÁË£¬ÐèҪʹÓÃREAD_PHONE_STATEȨÏÞ £¨¶ÁÈ¡SIM¿¨×´Ì¬£©£¬ÓÉÓÚ֮ǰδ¶Ô¸ÄȨÏÞÊÇ·ñ¹Ø±ÕûÓнøÐÐÏà¹ØÅжϣ¬Òò´ËÊÕµ½Á˺ܶàÀýÒòΪÉÏÊöȨÏ޹رգ¬µ¼ÖÂÃâÁ÷ʧ°ÜµÄÇé¿ö¡£

ÊÊÅä¹ý³ÌÈçÏ £º

£¨1£©Ê¹Óà try catch À´¼ì²éȨÏÞÊÇ·ñ¹Ø±Õ

Ïë·¨ºÜ¼òµ¥£¬Èç¹û¸ÄȨÏÞ±»Óû§½ûÖ¹ÁË£¬Äǿ϶¨»áÒì³££¬Òò´Ë¿ÉÒÔÔÚcatch ÖÐ×öÎÄÕ£¬½á¹û·¢ÏÖÕâÒ»Õиù±¾Ã»ÓÐÓã¬ÎªÉ¶ÁË £¿ÒòΪʹÓà READ_PHONE_STATE ȨÏ޵ķ½·¨ÄÚ²¿ÒѾ­try catch £¬ÍâÃæÎÞ·¨²¶»ñ£¬Òò´Ë¸Ã·½·¨Ê§Ð§¡£

£¨2£©ContextCompat : : checkSelfPermisson

¼ÈÈ»ÔÚ6.0 ¿ÉÒÔʹÓà Context : : checkSelfPermisson ½øÐÐȨÏÞ¼ì²é£¬ÄÇÄÜ·ñʹÓÃsupport v4 ÖÐµÄ ContextCompat : : checkSelfPermisson ·½·¨ÁË£¬ÊÔһϣ¬·¢ÏÖÔÚapi 23 ÒÔÏÂʧЧ£¬ÎªÁË̽¾¿Ô­Òò£¬²é¿´ÁË ActivityCompat : : requestPermissons ÄÚ²¿ÊµÏÖ£¬ÈçÏÂ

ActivityCompat : : requestPermissons

ÄÚ²¿È¨ÏÞ¼ì²é·½·¨ÔÚapi 23 ÒÔÏ£¬Ê¹ÓõÄÊÇ PackageManager::checkPermission£¬ÔÙÈ¥²é¿´PackageManager::checkPermission·½·¨£¬ÈçÏ£º·¢ÏÖֻҪȨÏÞÔÚAndroidManifest.xmlÖÐ×¢²á¹ý£¬¾ù»áÈÏΪ¸ÃȨÏÞgranted £¬Òò´ËÉÏÊö·½·¨ÔÚapi 23 ÒÔÏÂҲʧЧ¡£

PackageManager::checkPermission

²éÔÄÏà¹Ø×ÊÁϺÍÇë½Ì×éÄÚͬÊ£¬·¢ÏÖSupport V4 ÏÂÃæÓÐÒ»¸öרÃżì²éȨÏ޵Ť¾ßÀàPermissionChecker¡£

£¨3£©PermissionChecker

²é¿´PermissionCheckerÔ´Âë·¢ÏÖ £¬PermissionCheckerÄÚ²¿Êµ¼ÊÉÏʹÓõÄÊÇAppOpsManagerCompt£¬¶øAppOpsManagerÊÇÔÚapi 19 ¼ÓÈë½øÈëµÄ£¨AppOpsManagerºóÃæ½éÉÜ£©

PermissionChecker::checkPermission

½ø¶ø²é¿´AppOpsManagerCompat ÄÚ²¿ÊµÏÖ

 

AppOpsManagerCompat::permissionToOp

IMPLʵÏÖÈçÏ£º

IMPLʵÏÖ

´ÓÉÏͼ¿ÉÒÔ¿´³ö£ºÔÚapi 23ÒÔÏ£¬ AppOpsManagerImpl::permissionToOp Ö±½Ó·µ»ØÎªnull £¬ÕâÖ±½Óµ¼ÖÂapi 23ÒÔÏÂȨÏÞ¼ì²é½«»á·µ»Ø granted £¬Òò´Ë£¬¸Ã·½·¨ÔÚapi 23 Ï£¬È¨ÏÞ¼ì²é·½·¨Ò²»áʧЧ¡£

£¨4£©AppOpsManager

API 19ÒÔÉÏ £¬Google ¹Ù·½ÌṩÁË AppOpsManager ÀàÀ´¼ì²éȨÏÞ£¬¿´µ½Õâ¸öapi ʱ£¬ÄÔº£¸¡ÏÖ³ö ¡°ÌìÎÞ¾øÈË֮·°¡¡±£¬ÀïÃæÓÐÁ½¸ö±È½ÏÖØÒªµÄ·½·¨ £ºAppOpsManager::checkOp(int op ,int uid ,String packageName) £¨hide·½·¨£©ºÍAppOpsManager::checkOp(String op,int uid ,String packageName)£¨public ·½·¨ £¬api 23 ÒÔÉÏ¿ÉÓã©£¬²»¾­Ë¼¿¼£¬Ö±½Óд³öÁËÈçÏÂÁ½¸ö·½·¨

1£©AppOpsManager::checkOp(int op ,int uid ,String packageName)

ÐèҪʹÓ÷´Éä £º

 

AppOpsManager::checkOp(int op ,int uid ,String packageName)

2£©AppOpsManager::checkOp(String op,int uid ,String packageName)

API >= 23 ²Å¿ÉÒÔʹÓà £º

AppOpsManager::checkOp(String op,int uid ,String packageName)

ÔÚʵ²âÖз¢ÏÖ£¬api µÍÓÚ23ʱ £¬OP_READ_PHONE_STATE =51 ÕÒ²»µ½£¬µ¼Ö·´Éäʧ°Ü¡£

×Ðϸ²ì¿´ÁËһϠ6.0 £¨API 23 £©_NUM_OP = 62,ÈçÏ£¬ÎªºÎÕÒ²»µ½51 ÁË

6.0 £¨API 23 £©_NUM_OP = 62

ÄѲ»³É ÿ¸ö°æ±¾»¹²»Ò»Ñù£¬²é¿´ÆäËû°æ±¾£¬ÑéÖ¤ÁËÕâ¸öÏë·¨£º

5.1.1 £¨API 22 £©_NUM_OP = 48

5.1.1

Op¸öÊýÏÞÖÆ £¨ÐèÒªÕÒµ½¶ÔÓ¦Ô´Âë˵Ã÷**£©ÏêÇé ²Î¿´ £º

²é¿´Android ¶ÔÓ¦°æ±¾ _NUM_OP £¨Ä¿Ç°×î¸ßÖ§³Ö5.1.1°æ±¾£©

´Ëʱ£¬OP_READ_PHONE_STATE = 51 ÔÚ6.0£¨API 23£©ÒÔÏ£¬Í¨¹ý·´ÉäÊÇÕÒ²»µ½µÄ£¬Òò´Ë¶ÔÓÚREAD_PHONE_STATEȨÏÞ¼ì²é½öÏÞÓÚ6.0¼°6.0ÒÔÉÏ¡£

ͬʱҲ×Ðϸ¿´ÁËÒ»ÏÂAppOpsManager Àà½éÉÜ£¬²¢²»ÊÇΪ¿ª·¢ÕßÉè¼ÆµÄ£¬²»¹ýÆäËûȨÏÞ¼æÈÝ¿ÉÒÔʹÓÃÕâÖÖ·½·¨£¬Ç°ÌáÊÇ Òª¿´OP_*ÊÇÔÚʲô°æ±¾²ÅÓеģ¬Ðè×ö¼æÈÝ·½°¸ ¡£

public class AppOpsManager

extends Object

API for interacting with ¡°application

operation¡± tracking.

This API is not generally intended for third

party application developers; most features

are only available to system applications.

Obtain an instance of it through Context.

getSystemService with Context.APP_OPS_SERVICE.

£¨5£©×îºó²é¿´Á˼¸¸öµÚÈý·½È¨Ï޿⣨ÔÝδ¿´Í꣩

PermissionsDispatcher

AndPermission

Èý¡¢Ìø×ªµ½app¹ÜÀíȨÏÞÒ³Ãæ

¼ÈÈ»ÔÚÕâÀï½²½âÌø×ªµ½app ¹ÜÀíȨÏÞÒ³ÃæµÄ·½·¨£¬¿ÉÏë¶øÖ®£¬ÊÂÇé¾ø¶Ô²»Ì«¼òµ¥¡£Android Ë鯬»¯²»½öÔÚ´æÔÚÓÚuiÊÊÅä £¬Í¬ÑùÒ²´æÔÚÓÚÕâÀµ¼ÖÂÎÒÃÇÎÞ·¨Ê¹ÓÃͬһÖÖ·½Ê½Ìø×ªµ½app¹ÜÀíȨÏÞÒ³Ãæ£¨ÊÊÅ䣬Android ¿ª·¢ÓÀÔ¶µÄÍ´£©¡£

ÄÇÓÐûÓа취¿ÉÒÔ¼ò»¯ÊÊÅ乤×÷£¬¼õÉÙ¿ª·¢Á¿£¬·½·¨µ±È»ÓУ¬²»¹ýÐèÒªÎÒÃÇ×Ô¼ºÈ¥×ܽáºÍ̽Ë÷µÄ£¬Ä¿Ç°ÒÑÓз½·¨£º

£¨1£©Ö±½ÓÌø×ªµ½ÏµÍ³ÉèÖÃÒ³

Intent intent =newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Settings.ACTION_APPLICATION

_DETAILS_SETTINGS);
intent.setData(Uri.fromParts("package",get

PackageName(), null));

try{
startActivity(intent);
}catch(Exception exception) {
exception.printStackTrace();
}

¼ÇµÃÒªÌí¼ÓÉÏ try catch £¬²»¼Ó¿ÉÄÜ»ácrash¡£ÕâÖÖ·½Ê½¾Í²»ÐèÒªÊÊÅä¸÷¸ö³§É̵IJ»Í¬°æ±¾rom£¬È±µãÊÇ£¬Óû§Ö»ÄÜÌø×ªµ½ÏµÍ³ÉèÖÃÒ³£¬È»ºóÈ¥ÕÒ¶ÔÓ¦app µÄȨÏÞ¹ÜÀí£¨×Ü»áÓÐһЩÓû§ÕÒ²»µ½£©

£¨2£©Õ¾ÔÚǰÈ˵ļçÉÏ

ÒýÓÃǰÈ˾­Ñ飺Android¸÷´óÊÖ»úÆ·ÅÆÊÖ»úÌø×ªµ½È¨ÏÞ¹ÜÀí½çÃæ £¨Î´Ò»Ò»ÑéÖ¤£¬±Ï¾¹Ã»ÄÇô¶àÊÖ»ú£©

ÄÇÊDz»ÊÇǰÈ˾­ÑéÒ»¶¨¶ÔÁË£¬ÄǾͲ»Ò»¶¨ÁË£¬ÔÚµ±Ê±¿ÉÄÜÊǶԵģ¬ÔÚÏÖÔÚ¿ÉÄܾÍÐв»Í¨ÁË£¬ÏÖÔÚÒÔMIUIÌø×ªµ½app ȨÏÞ¹ÜÀíÒ³ÃæÎªÀý½øÐÐ˵Ã÷¡£

1£©MIUI 6/7

Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissions

EditorActivity");
localIntent.putExtra("extra_pkgname", context.

getPackageName());

try{
startActivity(intent);
}catch(Exception exception) {
exception.printStackTrace();
}

2£©MIUI 8

Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.Permission

sEditorActivity");
localIntent.putExtra("extra_pkgname", context

.getPackageName());

try{
startActivity(intent);
}catch(Exception exception) {
exception.printStackTrace();
}

¶Ô±È1£©ºÍ2£©·¢ÏÖ£¬ÔÚMIUI 6/7 ºÍMIUI 8 ÉÏÃæ£¬È¨ÏÞ¹ÜÀíÒ³ÃæµÄactivityÃû×Ö²»Ò»ÑùÁË£¬Òò´ËʹÓÃMIUI6/7µÄ·½·¨ÔÚMIUI8ÉϾͻáʧЧ£¬Èç¹ûûÓмÓÉÏtry catch £¬¾Í»áÖ±½Ócrash¡£

¶ÔÓÚÉÏÊö±ä»¯£¬×÷Ϊһ¸ö¿ª·¢ÕßÒ»°ã¶¼ÊDz»ÖªµÀµÄ£¬¼´±ãͨ¹ý·´À¡·¢ÏÖÁËÕâ¸öÎÊÌ⣬ҲÓпÉÄܲ»ÖªµÀ¶ÔÓ¦µÄactivityÊÇʲô£¬´Ë¿ÌҪôËÑË÷ÍøÉÏÓÐûÓÐÀàËÆ½â¾ö·½°¸£¬ÒªÃ´ÇóÖúÓÚ¶ÔÓ¦rom ¿ª·¢³§É̵Ŀª·¢ÕßÂÛ̳ £¨ÓÐʱ½â¾ö»ØÓ¦ËÙ¶ÈÏ൱Âý£©£¬ÄÇÓÐûÓиüºÃµÄ°ì·¨ÁË£¬·½·¨Ïê¼û£¨3£©²¿·Ö¡£

£¨3£©²é¿´Ä³¸öROMµÄij¸ö°æ±¾µÄȨÏÞ¹ÜÀíÒ³ÃæµÄactivity

ÕâÀïÒÔ»ªÎªp8ΪÀý¼òҪ˵Ã÷£¬Ïêϸ²½ÖèÈçÏ£º

1£©Í¨¹ýÉèÖÃÕÒµ½¶ÔÓ¦appµÄȨÏÞ¹ÜÀíÒ³Ãæ£¬ÈçÏ£º

Æó¶ìfmÔÚ»ªÎªp8ÉϵÄȨÏÞ¹ÜÀíÒ³Ãæ

2£©ÕÒµ½¶ÔÓ¦Ò³ÃæµÄactivity

·½·¨Ò»£ºÍ¨¹ýadd ¹¤¾ß²é¿´Õ»¶¥Activity

adb shell dumpsys activity | grep "mFocusedActivity"

Æó¶ìfmÔÚ»ªÎªp8ÉϵÄȨÏÞ¹ÜÀíÒ³Ãæ¶ÔÓ¦µÄactivity

¸üΪÏêϸµÄ¶ÑÕ»ÐÅÏ¢

ÏêϸµÄ¶ÑÕ»ÐÅÏ¢

·½·¨¶þ£ºÊ¹ÓÃActivity Tracer¹¤¾ß

ʹÓ÷½·¨£º¿É²Î¼ûÎÒ֮ǰµÄÎÄÕ £ºAndroid¿ª·¢¡ª¡ª С¹¤¾ß£¬´óЧÂÊ

ʹÓÃActivity Tracer²é¿´È¨ÏÞ¹ÜÀíÒ³Ãæ¶ÔÓ¦µÄactivity

   
2272 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì