自己的小 APP,以前手机版本比较低,只是在 AndroidManifest.xml 写入了调用外部存储权限,但是现在手机升级之后,必须动态调用权限,求帮忙 QQ:5194434
1
xuhuanpku OP 发错版面,求删
|
2
zapper 2018-01-23 15:27:58 +08:00
|
3
xuhuanpku OP @zapper 多谢,不过我不是程序员,我查到可以加入这些代码
private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; public static void verifyStoragePermissions(Activity activity) { // Check if we have write permission int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE); } } 不过这是应该加在哪呢?有人说是 Activity ?难道是在 AndroidManifest.xml 里面? |
4
zapper 2018-01-23 19:34:58 +08:00
java 代码任意位置,至少得在你写外部存储之前
|
5
XinLake 2018-01-23 21:32:47 +08:00
你不是程序员搞这事就比较麻烦了,这东西还得要调试,不是程序员很难搞好。我搞过这种案例,但是我不用 QQ。
如果是不给权限不运行的那种好办点(大部分国产 APP 就这样),加在你的入口 Activity 里,检测到权限没有授予就弹个提示,等待授权。 如果是进入功能时检测权限的就麻烦点( LinkedIn APP 就是这种),这个要加在功能入口出,对程序的模块化要求高点。 |
6
chinvo 2018-01-23 21:34:48 +08:00
你可以降低 target sdk version
就可以继续在安装时请求权限了 |
8
XinLake 2018-01-24 19:53:42 +08:00 via Android
在 AndroidManifest.xml 里可以找到入口 activity
|
11
XinLake 2018-01-24 21:55:47 +08:00
@xuhuanpku
在 APP 源码的 AndroidManifest.xml 文件里查找有如下内容的 <activity> 标签 <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> 这个就是入口 activity,是用户点击图标时 Launcher 启动 APP 的默认 Activity。 找到后可以定位到该入口 activity 的源码,包名+activity 的 name。在 java 源码处加入权限检测和申请逻辑。可以下参考请求权限的文档: https://developer.android.google.cn/reference/android/app/Activity.html#requestPermissions(java.lang.String[], int) 如果 APP 设计了封面 activity,就是用来检测权限环境等作用的,那就好加点。如果没有这个设计,那就麻烦点。不过这种事情要是找软件工程师估计就是现场解决的事情。 你说的改 classes.dex ,那是改 APK 么?我没改过别人的东西,没法回答你。 |
12
xuhuanpku OP @XinLake
从我这个 AndroidManifest.xml 看,应该就是改 com/z****q/z*q/MainActivity 这个源码吧,后门的 Register 和 Calculate 不用管吧 —————————————————————————————————————————————————— <?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.z****n.z*q" platformBuildVersionCode="23" platformBuildVersionName="6.0-2438415"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:allowBackup="true" android:icon="@mipmap/logo" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.z****n.z*q.MainActivity"/> <activity android:name="com.z****n.z*q.Register"/> <activity android:name="com.z****n.z*q.Calculate"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name="com.z****n.z*q.Trend" android:theme="@android:style/Theme.Dialog"/> <activity android:launchMode="singleTask" android:name="com.tencent.tauth.AuthActivity" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="tencent1105533418"/> </intent-filter> </activity> <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/> <activity android:name="com.z****n.z*q.LoginViaQQ"/> </application> </manifest> |