精华内容
下载资源
问答
  • 安装我们的app时提示这个权限,给用户感觉不好,可以不显示出来吗?或者说是这个权限是什么?有知道的吗? 谢谢
  • 这个问题在8.0系统的手机上不是必现的,这可能和手机厂商的系统处理有关,但是有一点是确定的:Google从Android8.0系统开始,关闭了未知应用安装权限,需要用户手动点开。 第一步:当APK下载完毕之后,正常来说要...

    在Android 8.0以上系统的手机上,会发现有部份手机,app下载完毕之后但是安装不上,也就是下载完毕之后,闪退。这个问题在8.0系统的手机上不是必现的,这可能和手机厂商的系统处理有关,但是有一点是确定的:Google从Android8.0系统开始,关闭了未知应用安装权限,需要用户手动点开。

    第一步:当APK下载完毕之后,正常来说要跳转到APK安装页面,但是8.0系统需要做一个判断:是否用户开启了应用安装权限。

           // 兼容Android 8.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                //先获取是否有安装未知来源应用的权限
                boolean haveInstallPermission = context.getPackageManager().canRequestPackageInstalls();
                if (!haveInstallPermission) {//没有权限
                    //TODO  去开启权限
                } else {
                    //TODO 安装APK
                }
            } else {
                //TODO 安装APK
            }

    第二步:如果没有就跳转到安装权限列表,然后从列表中找到我们的项目APP,跳转到我们的APP的设置安装权限页面:

        @RequiresApi(api = Build.VERSION_CODES.O)
        private void startInstallPermissionSettingActivity() {
            Uri packageURI = Uri.parse("package:" + getPackageName());
            //注意这个是8.0新API
            Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
            startActivityForResult(intent, UNKNOW_APP_SOURCE_CODE);
        }
    

    需要注意的是上面的getPackgeName() 这个一定要加。应为这句话就是表明直接跳转到我们APP的设置安装权限页面(不加的话,是跳转到APP设置权限列表页面)。
    UNKNOW_APP_SOURCE_CODE,这个变量就是开发者自己定义的了。

    第三步:在onActivityResult方法中,接受到是否获取权限成功,如果成功就跳转到直接安装APK。

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == UNKNOW_APP_SOURCE_CODE && resultCode == RESULT_OK) {
                //TODO 安装APK
            }
        }
    展开全文
  • 部分手机读取应用列表权限

    万次阅读 2018-08-08 15:20:39
    某型号小米手机关闭读取应用列表权限后仍然可以手机安装的第三方应用,华为手机关闭读取应用列表权限后不能读取第三方应用列表,只可以读取系统应用。由于没有对应的权限,查看源码也没有对应的方法可以确定开关的...

    部分手机比如小米,华为在权限管理那里有个读取应用列表的权限,这个读取应用列表的权限不需要申请,部分手机系统默认就有的,并且默认打开。某型号小米手机关闭读取应用列表权限后仍然可以手机安装的第三方应用,华为手机关闭读取应用列表权限后不能读取第三方应用列表,只可以读取系统应用。由于没有对应的权限,查看源码也没有对应的方法可以确定开关的状态(貌似原生应用是没有这个权限的,应该是不同的手机厂商定制的,所以需要根据不同牌子的手机来处理)。查不同ROM手机系统源码来获取开关状态肯定是行不通的,所以只能曲线救国了,先获取第三方应用,能获取就不管了,不能获取就提示用户去权限管理里面打开读取应用列表权限。代码如下:(只适配了华为手机)

    if(android.os.Build.BRAND.equalsIgnoreCase("huawei") || android.os.Build.BRAND.equalsIgnoreCase("honor")){
        getAll();
    }else{
        initBqsDFSDK(MainFQActivity.this);
        BqsDF.commitLocation(GlobalConfig.getLocation()[1],GlobalConfig.getLocation()[0]);
    }
    private void getAll(){
        ArrayList<String> appNames = new ArrayList<>();
        PackageManager pm = getPackageManager();
        try {
            List<PackageInfo> packageInfoList = pm.getInstalledPackages(0);
            for(int i=0;i<packageInfoList.size();i++){
                PackageInfo packageInfo = packageInfoList.get(i);
                String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
                if(TextUtils.isEmpty(appName)){
                    appName = packageInfo.packageName;
                }
                if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM )<= 0){
                    if(!packageInfo.packageName.equals(getPackageName())) {
                        appNames.add(appName);
                        break;
                    }
                }
            }
            if(appNames.size() <= 0){
                AlertDialog.Builder builder = new AlertDialog.Builder(this)
                        .setMessage("该应用需要读取已安装应用列表权限,请前往开启该应用的读取已安装应用列表的权限")
                        .setPositiveButton("去设置", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                try {
                                    Intent intent = new Intent();
                                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");//华为权限管理
                                    intent.setComponent(comp);
                                    startActivity(intent);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                    Intent localIntent = new Intent();
                                    localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                                    localIntent.setData(Uri.fromParts("package", getPackageName(), null));
                                    startActivity(localIntent);
                                }
                                dialog.dismiss();
                            }
                        });
                builder.create().show();
            }else{
                initBqsDFSDK(MainFQActivity.this);
                BqsDF.commitLocation(GlobalConfig.getLocation()[1],GlobalConfig.getLocation()[0]);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

     

    展开全文
  • 首先的问题是:Android “读取已安装应用列表”需要申请权限吗? 这里我先公布下答案:不需要 一个app无非实现一个团队或个人的商业价值和潜在可能,要是规模大的app,这种特征就非常明显。简而言之,这种权限请求...

    转载自:https://blog.csdn.net/u010844304/article/details/111044338

    如何在Android 11 上获取已安装应用列表在Android 11上,我们可以看到很多的更新都是用来保护隐私的,如果你的app 在使用PackageManger的方法来获取安装的应用列表,

    那么在Android11上,就需要做一点改变了。

    我们来看看一下获取应用列表的代码,会不会和你的很相似

    List<ApplicationInfo> allApps = getPackageManager().getInstalledApplications(0);
    for(ApplicationInfo ai : allApps) {
          Log.d("packageName", ai.packageName);
     }
    

    现在你是在11上使用,代码即使一样,除非你在AndroidManifest.xml中添加代码,否则是不会生效的。

    这里有3种不同的方法去查询已经安装的app,让我们瞧瞧

    包名查询
    如果你已经知道想查询的应用包名,那么你可以这样做

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.blowing.demo"
        <queries>
            <package android:name="com.android.settings"/>
            <package android:name="com.blowing.test"/>
        </queries>
    </manifest>
    

    通过intent filter查询
    如果你不知道应用的包名,只是想查询具有某种功能的应用,那么可以使用以下的方式

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.blowing.demo"
        <queries>
            <intent>
                 <action android:name="android.intent.action.SEND"/>
                 <data android:mimeType="image/png"/>
            </intent>
        </queries>
    </manifest>
    

    这里需要注意的是:

    • intent 中只能有一个action元素
    • data中也只能有这些属性: mimeType,scheme 和host

    查询所有的应用
    11上添加了一个QUERY_ALL_PACKAGES这样的权限,我们配置上就ok了

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
    

    如果我们使用android.intent.action.MAIN 作为action元素,那么不添加权限,也是可以绕过去的,因为几乎所有应用都会有这个action。不知道这个算不算是bug了。

    转载自:https://www.jianshu.com/p/dee8bc1fb847

    首先的问题是:Android “读取已安装应用列表”需要申请权限吗?

    这里我先公布下答案:不需要

    一个app无非实现一个团队或个人的商业价值和潜在可能,要是规模大的app,这种特征就非常明显。简而言之,这种权限请求无非三种需求

    • 应用市场类,垃圾清理类,杀毒安全类,请求理由是检查应用是否需要升级、清理、杀毒,这种请求无可厚非,可以支持!
    • 部分app需要调用外部(其他)app,比如说文件管理类app就需要知道哪些应用可以打开哪些文件,这种请求可以可以理解,但是完全可以避免,当然,请求也没什么问题!
    • 这方便不同应用间互相进行唤醒
    • add:添加一种情况,就是app使用第三方服务(比如Tencent x5,我不相信它会忍住不叫小伙伴起来嗨,细节我没研究过但是道理大家都懂)

    结论就是,国内部分厂商比如华为、oppo,他们将”获取用户已安装应用列表”的权限暴露给了用户,让用户可以自由决定允许或者禁止应用访问该信息。同时,这个权限类似于附加的默认权限,一旦app声明了任何权限,那么”读取已安装应用列表”的权限也会被附加进来。但这个权限也不是太敏感,所以对于用户是无感知的。这里的无感知指的是不会在应用中去主动让我们弹窗申请权限,手机管家弹出的通知不算。

    转载自:https://blog.csdn.net/xiao5678yun/article/details/81809795

    Android权限GET_TASKS问题

    Android 5.0开始,Google开始对getRunningTasks和getRecentTasks等接口进行限制使用,默认情况下,普通的第三方应用(非系统应用)不能使用该接口。之前,只要声明android.permission.GET_TASKS权限,开发的应用就可以使用getRunningTasks等接口。但从5.0开始,这种方式已经废弃,应用要使用该接口必须声明权限android.permission.REAL_GET_TASKS,而这个权限是不对三方应用开放的(在Manifest里申请了也没有作用),只有系统应用(有系统签名)可以调用该权限。

    展开全文
  • 在原生设置中添加一个服务,在设置中直接申请安装权限,因为要想实现静默安装就需要系统权限,设置应用属于系统应用,直接在里面添加安装权限申请即可: 2. 如何第三方想安装,则启动服务,传入apk的路径,进入...

    实现逻辑:1. 在原生设置中添加一个服务,在设置中直接申请安装权限,因为要想实现静默安装就需要系统权限,设置应用属于系统应用,直接在里面添加安装权限申请即可:
    2. 如何第三方想安装,则启动服务,传入apk的路径,进入静默安装。
    1.需要系统权限android:sharedUserId=“android.uid.system”
    2.需要系统签名,Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行。

    通过服务去安装,可以把服务添加到原生settings/Launcher3/systemui等。
    具体Service如下:

    package com.android.settings;
    import java.io.File;
    import android.app.PackageInstallObserver;
    import android.app.Service;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Handler;
    import android.os.IBinder;
    import android.os.Message;
        /**
         * 1.AndroidManifest 中添加权限
         * @author ybf
         * <!-- 静默安装 -->
          *    <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 
         */
    /*Intent intent = new Intent();
    *intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.CarService"));
    *intent.setAction("com.android.setting.carService");
    *intent.putExtra("cmd", "install");
    *intent.putExtra("path", "/storage/emulated/test.apk");
    *startService(intent);
    */
    
    
    
    
    public class CarService extends Service {
    
    	private static final int INSTALL_COMPLETE =1;
    	
    	Handler mhandler = new Handler() {
    		@Override
    		public void handleMessage(Message msg) {
    			// TODO Auto-generated method stub
    			super.handleMessage(msg);
    			switch (msg.what) {
    			case INSTALL_COMPLETE:
    				sendBrodCastComplete();
    				break;
    			}
    		}
    	};
    	
    	@Override
    	public IBinder onBind(Intent intent) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    	@Override
    	public void onCreate() {
    		// TODO Auto-generated method stub
    		super.onCreate();
    		
    	}
    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    		// TODO Auto-generated method stub
    		inStallApk(intent);
    		return super.onStartCommand(intent, flags, startId);
    	}
    	/**
    	 * 安装
    	 */
    	@SuppressWarnings("deprecation")
    	private void inStallApk(Intent intent) {
    		Logger.e("inStallApk");
    		if(intent != null && intent.hasExtra("cmd")){
    			String cmd = intent.getStringExtra("cmd");
    			if("install".equals(cmd)){
    				String path = intent.getStringExtra("path");
    				int installFlags = PackageManager.INSTALL_ALL_USERS |PackageManager.INSTALL_REPLACE_EXISTING;
    				final Uri apkURI = Uri.fromFile(new File(path));
    				PackageInstallObserver observer = new PackageInstallObserver();
    				PackageManager pm = getPackageManager();
    				pm.installPackage(apkURI, observer, installFlags, null);
    			}
    		}
    		
    	}
    	/**
    	 * 发送安装完成广播
    	 */
    	public void sendBrodCastComplete(){
    		Intent intent = new Intent(); 
    		intent.setAction("com.android.system.INSTALL_COMPLETE"); 
    		//intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
    		//前台广播(默认是后台广播) 
    		sendBroadcast(intent);
    	}
    	@Override
    	public void onDestroy() {
    		// TODO Auto-generated method stub
    		super.onDestroy();
    	}
    	/**
    	 * 源码编译添加此函数
    	 * 
    	 *
    	 */
    /*	 private class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
    	        public void packageDeleted(String packageName, int returnCode) {
    	            Message msg = mhandler.obtainMessage(INSTALL_COMPLETE);
    	            msg.arg1 = returnCode;
    	            mhandler.sendMessage(msg);          
    	        }   
    	    }*/
    	
    }
    
    展开全文
  • 第一次安装 iOS 应用获取网络权限

    千次阅读 2017-06-22 10:17:49
    在iOS 10下 ,首次进入应用时,会有询问是否允许网络连接权限的的弹窗,为更好进行用户交互,需要在打开应用时获取应用禁用网络权限状态(状态分为:未知、限制网络、未限制网络),客户端根据不同的权限状态定制...
  • 前几天导入新工程,用的别人的代码,打包以后发现部分华为手机和小米手机安装签名打包的apk文件老是提示安装失败,说是与已安装应用权限冲突,有的说将开发者选项miui优化关闭即可,但是试了不管用,还有的说是...
  • Android读取应用列表权限漏洞

    千次阅读 2019-08-06 20:46:35
    Android有一个权限叫读取已安装应用列表,貌似不是原生权限,禁用后,应用就读不到系统的应用列表,只能读到它自己。 实测发现,这个权限形同虚设,利用该漏洞可以绕过读取应用列表权限获取所有应用,目前发现共有三...
  • 3.第三方应用不可卸载并且不用动态申请危险权限应用 通常厂商内置应用会放到vendor目录下再创建自己的目录名,把需要预置的apk放入对应目录,并编写对应的mk文件。 应用是否可用卸载会根据类型最后拷贝到不同的...
  • Android中应用调用系统权限

    千次阅读 2017-03-02 11:24:05
    现在设备的安全性越来越受到重视,随之而来的便是开发中的各种不便,比如有普通权限,运行时权限,系统权限之分。...chapter one 系统应用添加系统权限 对于可以编译到源码里的apk添加系统权限很简单,
  • 后来发现个问题,我通过Eclipse安装应用就直接开启了存储权限 AS安装应用就没打开存储权限 由于此权限没打开,导致我java.io.FileNotFoundException,无法创建文件夹。请问我应该解决这
  • 使用PermissionsDispatcher进行程序管理,在程序运行过程中,申请权限和拒绝权限都不会出现问题,后来发现,在程序运行过程中,比如进入某个页面,然后点击home键,在设置中,选择该应用关闭某个权限,再返回该...
  • 此刻去调用相机,弹出权限申请对话框,此刻点击拒绝,然后经过处理后弹出去设置权限界面(因为权限总归是要申请),如果再在置界面里打开应用权限设置,此刻不但不打开相机权限反而将已经申请的读取通讯录权限关闭会...
  • Android 应用开发(17)---应用权限

    千次阅读 2018-06-11 08:28:30
    权限概述许可 的目的是保护...此页面概述了Android权限的工作原理,包括:如何向用户显示权限安装时间和运行时权限请求之间的区别,权限的执行方式以及权限和组的权限类型。如果您只想使用应用权限的操作指南...
  • Android应用程序权限管理

    万次阅读 2015-01-05 10:09:49
    在Android源码frameworks/base/api/current.txt中定义了所有应用程序所需的权限 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 ...
  • 近日开发了一个Android软件,安装时需要先把数据文件复制到SDCard上,在虚拟机上运行时软件一打开就强制关闭了,看下LogCat的信息,发现软件找不到在首次安装时复制到SDCard上的数据文件,可看复制文件的代码,发现...
  • 针对android 6.0(API 23)以前的版本,只需要在【AndroidManifedt.xml】里面添加应用权限应用安装完成以后即可正常使用。 但是,对于android 6.0(API 23)以后的版本,系统允许用户单独管理应用的某个...
  • 看了许多帖子没有解决问题,这里写下来备忘。...关闭应用权限监控和USB安装管理(仅关闭USB安装管理无效)建议:自用机器最好别这样设置以免造成损失,因为存在安全隐患终于可以随心所欲写一些脚本操作应用了 ...
  • Android权限说明 Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制。 一、linux文件系统上的权限 -rwxr-x--x system system 4156 2012-06-30 16:12 test.apk. “-rwxr...
  • mac修改程序安装权限

    千次阅读 2016-11-19 11:21:12
    1、显示"任何来源"选项在控制台中执行:  sudo spctl --master-disable 2、不显示"任何来源"选项(macOS 10.12默认为不显示)在控制台中执行: ... sudo spctl --master-enable
  • targetSdk 的应用扔沿用旧版本的AppOps的权限管理机制,也就是安装权限。需要特别指出的是在 Android6.0 中,安装权限必须都是默认允许的,因为在 Android 6.0 中移除了AppOps中通过弹窗获取权限的机制。这导致...
  •  在Android开发中,往往会用到许多诸如摄像头、录音等权限。但是,我们都知道,小米、魅族等定制系统,或者360等安全软件在程序请求打开相机、录音等操作时,会先弹出对话框提示用户是否允许程序执行这些操作,如果...
  • uni-app 动态打开应用通知权限

    千次阅读 2020-10-15 14:50:41
    目前实现打开通知思路是引导用户在应用管理的页面手动打开通知权限,至于是否代码就可以实现打开通知权限我没有找到实现的方法,所以有会的麻烦评论一下谢谢 let platform = uni.getSystemInfoSync().platform ...
  • 安卓升级到6.0(targetSdkLevel 23)后,对应用权限的要求更加严格,从之前的应用安装权限检查改为新的运行时检查机制,如果未做调整,就容易产生安全异常。SecurityException. 本文译自安卓官方文档,希望给应用...
  • 怎么控制安卓应用权限

    千次阅读 2012-12-05 17:56:06
    现在有许多人都在使用安卓系统,本文主要介绍一下安卓... 1 为什么Android总是事无巨细地告诉你应用索取的每一项权限?  相比Apple,Microsoft严格控制生态系统(从苹果给开发者的“App Store Guideline
  • 这篇文章为大家系统的梳理...当然,本篇文章依然是参考了 Google 的官方文档:应用权限。 本文目录 一、认识 Android 权限 (一)Android 系统为什么需要权限? Android 系统设置权限的目的是保护 Android 用户的...
  • 经常遇到这样的疑问macOS安装某些应用为什么要关闭sip?我关闭了sip就不安全了,我不关有没有办法安装应用,带着这个问题macdown小编和您分析关闭sip的利与弊。 一、什么时候要关闭sip 安装一些反编译破解的应用时...
  • Android 应用程序如何获取system权限

    千次阅读 2019-07-31 15:22:40
    当Android应用程序用到重启系统、关闭系统、修改系统时间等功能时,需要用到system权限。 本文以OKxx18平台实现重启功能的应用程序PermissionTest为例,说明获取系统权限的方法。 1.首先在app工程的AndroidManifest....
  • Android应用安装过程

    千次阅读 2014-02-25 09:17:08
    前言 我们知道,在android手机上安装一个apk很简单,只要打开apk文件,默认就会弹出安装界面,然后点击确定,经过若干秒后,apk就安装成功了,可是你知道apk的安装过程是什么吗?...第二步,为应用创建数据目录
  • 在用Jenkins过程中忘记管理员密码和开启权限认证后管理员帐号没有任何权限是经常遇到的情况,最近有好多群友被这个问题困扰。但Jenkins没有提供密码找回的功能,经过一翻探索找到了一种变相的找回密码的方法,从而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,988
精华内容 65,995
关键字:

如何关闭应用安装权限