Articles of android 6.0 marshmallow

如何检查Android Marshmallow中的模拟位置?

如何检测Android Marshmallow Mock Location位置是否触发了Mock Location ? 以前,我使用了Settings.Secure.ALLOW_MOCK_LOCATION 但是,在API级别23中,这已被弃用。 我想检查触发器是否位于假位置或原始GPS? 现在,检查Mock Location是否启用Android Marshmallow的替代方法是什么?

已弃用的AudioManger.setStreamMute的替代方案?

AudioManger.setStreamMute现已弃用api 23,并且最好将AudioManager.adjustStreamVolume与AudioManager.ADJUST_MUTE.一起使用AudioManager.ADJUST_MUTE. 我的问题是这种标志仅支持api 23,而我的应用程序是最小api 16。 还有其他方法可以使整个系统静音吗? 如果没有,为什么谷歌会弃用这种方法?

来自Android 6(Marshmallow)的Gallery中的图片

在我的应用程序中,我试图从厨房中选择图像,以便将该图像传递给服务器。 代码在Android 5及更低版本上正常运行,但对于Nexus 5上的Android 6,我无法获取图像信息。 记录我得到的痕迹 注意 :Android 5及以下版本的代码运行正常 11-06 12:27:43.736: W/System.err(31678): java.lang.SecurityException: Permission Denial: reading com.google.android.apps.photos.contentprovider.MediaContentProvider uri content://com.google.android.apps.photos.contentprovider/0/1/content%3A//media/external/images/media/19138/ACTUAL/94710853 from pid=31678, uid=10111 requires the provider be exported, or grantUriPermission() 11-06 12:27:43.757: W/System.err(31678): at android.os.Parcel.readException(Parcel.java:1599) 11-06 12:27:43.757: W/System.err(31678): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 11-06 12:27:43.757: W/System.err(31678): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 11-06 12:27:43.757: W/System.err(31678): at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 11-06 12:27:43.757: W/System.err(31678): at android.content.ContentResolver.query(ContentResolver.java:491) 11-06 […]

ScrollView内部的RecyclerView,某些项目未显示

我在ScrollView中有一个RecyclerView,如下所示: RecyclerView的项目是RelativeLayout ,其中有一个EditText和其他视图。 RelativeLayout和EditText的layout_height都是wrap_content 。 用户可以输入该EditText没有任何长度/行限制,以便每个项目的高度不同。 然后我发现Adapter中的getItemCount()返回true值但是onBindViewHolder()被调用了错误的时间(少于它应该),因此不足以显示所有项目。 我发现只有在我写了recyclerView.setNestedScrollingEnabled(false)才会发生这种情况。 但我不能删除这一行。 因为如果我这样做, RecyclerView将无法平滑滚动,并且与ScrollView和ScrollView本身内的其他视图ScrollView 。 这发生在6.0但不是4.1。 我在此页面上与Google进行了沟通: https : //code.google.com/p/android/issues/detail? RecyclerView ,他告诉我这是对RecyclerView的错误修复。 您可以访问该页面,以便更好地理解问题和我的目标(有一个小样本项目可以显示问题)。 我现在不同意他,我想解决这个问题。 请帮忙,提前谢谢。

棉花糖RelativeLayout使用alignBaseline表现得很奇怪

在Android 6.0 Marshmallow上,EditText相对于RelativeLayout中的ImageView与属性baseline和layout_alignBaseline的定位不再起作用。 甚至可以在Android studio的布局编辑器中观察到该行为。 在真正的Android Marshmallow设备或emulatr上,我的情况下的EditText移出屏幕并且不可见。 我是否会错过一些更改,这是一个错误吗? 我创建了Android Studio布局编辑器的截图。 这两个屏幕截图之间的区别仅在于API级别的更改。 我创建了一个示例项目https://github.com/mikegr/baseline

OutOfMemory仅在Android 6.0.1设备上出错

我的项目似乎有这个奇怪的问题。 一切正常,但自从我将S6 Edge更新到Android 6.0.1后,应用程序似乎在第二次启动后出现OutOfMemory错误。 该应用程序在目录中包含2000多个图像,我使用计时器递增计数器并在imageView上显示它们。 当onFinish()/ onPause()/ onDestroy()被调用时,我通过将它们设置为null来销毁/取消所有对象,例如定时器,计数器和imageView。 这就是我将图像提取/打印到imageView的方法 int resID = getResources().getIdentifier(“animation”+i , “drawable”, getPackageName()); Drawable animationFrame = ContextCompat.getDrawable(this, resID); animationView.setImageDrawable(animationFrame); i++; 在初始启动时一切都运行良好(即使我使用生成的APK安装应用程序)。 但是当我从最小化的应用程序中删除应用程序时,应用程序在2-3秒后崩溃。 我检查了分配的内存,第一次运行是正常的(最多12MB),而第二次分配的内存是255MB。 onDestroy()方法这包括我初始化的所有variables。 此外,如果重要,但我的variables初始化为私有或没有访问variables @Override protected void onDestroy() { super.onDestroy(); pauseAnimation(); animationView.setImageDrawable(null); animationView = null; justAnimation = null; buttonSign = null; i = 0; media.stop(); media = null; deathRateEU = 0; […]

Android Marshmallow权限测试

我在团队中遇到了这个问题:我们想测试与日历的交互,我们显然需要日历写入权限才能执行此操作。 有没有办法确保仪器测试有必要的权限? 我知道您可以虚拟授予特定avd的权限,但是有更好的方法吗?

升级到targetSdk 23或Android 6后,哪些权限不会停留?

背景 我记得曾经(在谷歌的一个video中)告诉我,如果以前版本的应用程序更新为新版本上有targetSdk 23,那么之前授予的所有权限 – 现在都将被授予。 因此,例如,如果您安装了一个带有targetSdk 22的应用程序,这需要获得从联系人读取的权限,那么即使在将应用程序升级到具有targetSdk 23的应用程序之后,它也会保持这种状态。 原因很简单:用户在安装时已经授予了权限。 问题 根据我的发现,这个规则有一个例外: 如果您的应用程序具有SYSTEM_ALERT_WINDOW权限,现在您升级到targetSdk 23,它将被撤销(重置),您需要从该用户请求它。 在文档中的任何位置都没有提到此行为: http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW http://developer.android.com/guide/topics/security/permissions.html http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html http://developer.android.com/about/versions/marshmallow/android-6.0.html 而且在我看过的任何video中都没有。 关于SYSTEM_ALERT_WINDOW权限,唯一提到的是你需要以不同的方式处理它们,使用ACTION_MANAGE_OVERLAY_PERMISSION来请求权限,以及Settings.canDrawOverlays(…)来检查是否授予了权限 我试过的 我试图联系Google了解这个问题,他们说这是故意的: 我与开发团队进行了交谈,您看到的行为正如预期的那样。 这在此处记录: http : //developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW 在Android M中提出了SYSTEM_ALERT_WINDOW的保护级别。 问题 是否有其他权限具有此行为? 如果应用程序有targetSdk 22/23,并且操作系统升级到Android 6会发生什么? SYSTEM_ALERT_WINDOW(或任何其他权限)是否会被撤销? 很确定其他东西会被授予,但我还是想问:其他类似特权的function如何:SAF,管理,使用访问,辅助function访问,通知访问,……? 编辑:关于#2,这是谷歌的答案(链接在这里 ): 在操作系统升级时,应用程序应保留SYSTEM_ALERT_WINDOW。 默认情况下,Pre-API 23应用程序具有权限,而默认情况下禁用API 23应用程序。 但是,有一个已知的错误,对于API 23应用程序,它们在升级时会丢失SYSTEM_ALERT_WINDOW。 对开发人员的建议是始终在开始时检查SYSTEM_ALERT_WINDOW的状态,如果未授予,则将用户定向到“设置”。 我们将在未来的版本中修复该问题。

测试打盹和待机模式

我关闭了运行Android M的Nexus 5设备的屏幕显示,然后发出以下命令。 im17-x0:~ rj$ adb shell dumpsys battery unplug im17-x0:~ rj$ adb shell dumpsys deviceidle step Stepped to: IDLE_PENDING im17-x0:~ ra$ adb shell dumpsys deviceidle step Stepped to: SENSING im17-x0:~ ra$ adb shell dumpsys deviceidle step Stepped to: IDLE 理想情况下,我的设备应该进入空闲模式。 但我在将它置于空闲模式并且仍在运行之前启动了CountDownTimer 。 我的手机中仍然存在网络访问(使用此function检查) 为什么设备不进入打盹模式? 从这里选择待机模式也具有相同的效果。 为什么? 同样在该计时器中,如果我检查isDeviceIdleMode() ,它返回true。

在开发者控制台中将Android目标Api Level 23降级为22

我上传了一个新的beta测试版本,其Android目标api级别为23.在它之前是22.我不知道,对于API级别23,有许多关于权限的更改。 我意识到在使用api级别23上传新的beta测试版本之后。所以我构建了一个新的版本,它再次使用api level 22来有更多的时间来调整我的app到api level 23。 但每次现在当我上传一个api级别为22的版本时,我在开发者控制台中收到错误“app无法保存”,没有关于错误的更多信息,我无法上传它。 当我编译具有目标API级别23的新版本时,可以再次上载。 我认为问题是降级到api 22级。 这是真的,一旦您在封闭式Beta测试中发布了API Level 23版本,您就无法降级回目标API级别22吗? 谢谢你的帮助! Smilingm