Articles of android 8.0 oreo

对于华为的系统文件,“源代码与字节码不匹配”

我们正在调试一个仅影响华为设备的应用程序的问题。 为了调试它,我们购买了P20 Lite ANE-LX1。 我们在代码中放置了一些断点,并正在研究完整的堆栈跟踪。 该设备已安装Android 8.0,我们在Android Studio中下载了相同的SDK。 当我们将设备连接到调试器并尝试调查堆栈跟踪时,我们在系统源文件中收到以下错误: 在使用堆栈跟踪后,我们可以确认我们的源文件确实与设备上安装的内容不对应。 有时,调试器指向调用functionA的行,在堆栈跟踪中,我们看到调用了functionB 。 我们可以确认受此问题影响的文件是: VideoView , MediaPlayer , ContentProvider 。 我们已经尝试了所有可能的解决方案,包括清理项目,从Android Studio删除任何其他SDK,修改项目设置 – 没有任何问题有助于解决此问题。 这让我们相信华为在他们的设备上安装了修改版的Android 8.0,这就是为什么我们无法调试系统文件的堆栈跟踪。 我们确实与华为联系,试图澄清这一点。 与此同时,如果您能向我们提出任何相关的想法,我们将不胜感激。 也许您知道在哪里可以获取华为在其设备上安装的源文件? 或许您知道如何以其他方式解决源代码和字节码之间的这种不匹配问题? 更新1 按照罗伯特的建议,我卸载了Android 26的源代码并在我的华为上再次运行应用程序。 当我跳进VideoView文件时,我看到以下图片: 我点击“下载”,它开始下载源文件: 在此之后,我能够进入VideoView ,它似乎工作正常。 但是,在这一行之后很明显这些源文件也是错误的: 当我尝试进入requestLayout函数时,我得到了这个: 这显然是一个错误的结果。 事实上,如果我点击“Step to the next line”,我会再次看到有关源代码与字节码不匹配的消息。

Android studio Emulator(未经授权的设备)

我知道在普通设备上我必须授权调试过程,但是在模拟器上授权是我的第一次。 我刚刚在我的家用电脑上安装了我的第一个模拟器来做一些工作,这就加速了。 知道是什么原因或Android o api 26 google play SDK是否正常? PS:我在家里使用Windows版本。

Android“O”(Oreo,8)媒体按钮问题

我在文字转语音应用程序中使用的耳机处理媒体按钮的代码在Android API 22到25下运行良好(在旧版本的Android中,它们由其他现在已经折旧的方式处理)。 然而,在Android 8“Oreo”下,无论是公共测试版还是最终版,它都无效。 这是相关的代码: 服务启动时,我创建MediaSessionCompact对象: mSession = new MediaSessionCompat(getApplicationContext(), “my.package.name._player_session”); mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setActive(true); mSession.setCallback(myMediaSessionCallback); PlaybackStateCompat state = new PlaybackStateCompat.Builder() .setActions(ACTION_PLAY_PAUSE | ACTION_PLAY | ACTION_PAUSE | ACTION_SKIP_TO_NEXT | ACTION_SKIP_TO_PREVIOUS | ACTION_FAST_FORWARD | ACTION_REWIND ) .setState(PlaybackStateCompat.STATE_PAUSED, 0 /*PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN*/, 1f) .build(); mSession.setPlaybackState(state); 当然有会话媒体回调定义: private MediaSessionCompat.Callback myMediaSessionCallback = new MediaSessionCompat.Callback() { @Override public boolean onMediaButtonEvent(Intent mediaButtonIntent) […]

交互式ussd会话(多步)不适用于android 8(奥利奥)

我目前正在使用android api level 26(Nexus 6P)中提供的Telephony Manager(USSD响应)。 对于单步ussd会话,它正在工作。 参考: http : //codedrago.com/q/140674/android-telephony-telephonymanager-ussd-android-8-0-oreo-does-android-8-0-api-26-support-sending-and-repying-对USSD的消息 例: USSD请求:“A”(ussd会话启动) USSD回复:“X”(ussd会话终止) TelephonyManager = telephonyManager(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); Handler handler = new Handler(); TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() { @Override public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) { super.onReceiveUssdResponse(telephonyManager, request, response); Log.e(“ussd”,response.toString()); } @Override public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) { super.onReceiveUssdResponseFailed(telephonyManager, request, […]

Firebase:如何在Android应用中设置默认通知频道?

如何为应用程序在后台时出现的通知消息设置默认通知通道? 默认情况下,这些消息使用“杂项”通道。

区分隐式广播接收器与清单中的显式广播接收器

根据Google提供的Android O迁移指南,大多数隐式广播意图不应在Manifest中注册(减去此处发现的一些例外情况),但显式广播意图保持不变。 我们希望将任何所需的广播从清单中移除。 但我们如何识别接收器是否隐含? 有一般规则吗? 以下是我们在清单中注册的广播示例。 我们应该只查看“action”标记,看看它是否列入白名单以便将其保留在清单中? 例如,“com.android.vending.INSTALL_REFERRER”意图未列入白名单。 我们应该在活动中注册吗? 如果是这样,它不会被解雇,因为当我们注册它时,应用程序已经安装? 当我试图理解广播接收器是隐式还是显式时,这让我感到困惑,因为我认为我只需要检查“动作”标签。

SecurityException:无法为用户0find提供程序null; 在Android 8.0上的ActiveAndroid上

我有一个使用ActiveAndroid的应用程序,它一直工作正常。 然而; 现在,当我尝试将模型保存到数据库时,我得到了一个SecurityException。 堆栈是: Error saving model java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority at android.os.Parcel.readException(Parcel.java:1942) at android.os.Parcel.readException(Parcel.java:1888) at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:801) at android.content.ContentResolver.notifyChange(ContentResolver.java:2046) at android.content.ContentResolver.notifyChange(ContentResolver.java:1997) at android.content.ContentResolver.notifyChange(ContentResolver.java:1967) at com.activeandroid.Model.save(Model.java:162) […. local stack removed] 还有其他人经历过这个吗? 我们是否需要在AndroidManifest.xml中指定Content Provider ? 对不起,我还没有一个孤立的例子。 我会努力把东西放在一起。 提前致谢

Oreo(API 26) – drawOverlay +绘制状态栏

在android oreo中,我不能再使用WindowManager.LayoutParams.TYPE_SYSTEM_ERROR ,而必须使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 。 缺点是,此模式不会覆盖状态栏。 反正有没有实现旧的行为,并能够绘制状态栏? 我有一个侧边栏应用程序,直到现在,我允许用户在屏幕顶部也有触发区域,现在不再工作,因为状态栏现在重叠在顶部的可触摸区域… 我对任何解决方案感兴趣,即使它仅适用于某些设备,例如root设备……因为我觉得这个问题没有正常的解决方案,因为android系统不再允许这样做,如文档中所述( https://developer.android.com/about/versions/oreo/android-8.0-changes.html#o-apps )。 不过,这并不意味着没有替代解决方案……

一些用户报告丢失数据

经过很长一段时间没有任何问题的应用程序运行 – 我得到一个报告表单用户说明保存的数据/照片时不时丢失。 即它最初可能有效,但在稍后阶段,内容似乎消失了。 我不能复制这个问题,所以我试图看看我是否可以“猜测”它。 要确保的第一件事是我不会以最近Android版本不可行的方式保存数据。 因此,这是我目前如何保存数据: … 第一次尝试 File storage_files_dir_file = ctx.getExternalFilesDir(“”); if (storage_files_dir_file.exists() == false) { return false; } // … some code here prepping content os = new FileOutputStream(path_final,true); // … some code here writing content MediaScannerConnection.scanFile(ctx, new String[] {s}, null, null); return true 如果以上返回false切换到 File storage_files_dir_file = ctx.getFilesDir(); if (storage_files_dir_file.exists() == […]

使用BroadcastReceiver的Awareness API和Android O.

我有一个Android应用程序,它使用Awareness API在插入耳机时设置围栏。 我使用代码实现了AwarenessFence,就像以下示例中所示: https : //developers.google.com/awareness/android-api/fence-register 。 我有一个PendingIntent定义为: PendingIntent.getBroadcast(context, 0, new Intent(“my.application.packageFENCE_RECEIVER_ACTION”), 0) 然后在我的AndroidManifest.xml文件中 这是在Manifest中声明的,因为即使我的应用程序在后台,我也希望接收广播。 这在Android 7.0及更低版本上运行良好,但是当我在Android 8.0上运行时,我得到错误: BroadcastQueue: Background execution not allowed: receiving Intent { act=my.application.packageFENCE_RECEIVER_ACTION 我认为这是由于Android O上后台执行的新限制。 任何人都可以告诉我如何注册一个广播接收器,它可以在运行API 26的Android设备上在后台监听感知围栏触发器。 让我知道如果有些事情不清楚或者我需要详细说明。 提前致谢