标签: android-14

前台服务在 Android 14 上崩溃

我有一个 Android 应用程序,在 Android 13 之前一直运行良好。升级到 Android 14(将 targetSdkVersion 设置为 34)后,我的应用程序在 Android 14 上崩溃。这是我的崩溃日志。

java.lang.RuntimeException: Unable to start service com.example.bleapp.service.BleAppService@1d05078 with Intent { cmp=com.example.bleapp/.service.BleAppService }: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{718b5ad 5016:com.example.bleapp/u0a356} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory]
  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4839)
  at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2289)
  at android.os.Handler.dispatchMessage(Handler.java:106)
  at android.os.Looper.loopOnce(Looper.java:205)
  at android.os.Looper.loop(Looper.java:294)
  at android.app.ActivityThread.main(ActivityThread.java:8177)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) …
Run Code Online (Sandbox Code Playgroud)

service android foreground-service android-14

24
推荐指数
1
解决办法
1万
查看次数

Android 14 上下文注册的广播接收器不起作用

我正在 Android 14 设备上试验我的应用程序,我发送本地广播,然后在应用程序内订阅它。但是,当我使用该RECEIVER_NOT_EXPORTED选项时,根本没有收到广播。

下面是我正在使用的代码:

class DashboardFragment : Fragment() {
private var \_binding: FragmentDashboardBinding? = null

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!
    
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        val dashboardViewModel =
            ViewModelProvider(this).get(DashboardViewModel::class.java)
    
        _binding = FragmentDashboardBinding.inflate(inflater, container, false)
        val root: View = binding.root
    
        binding.button.setOnClickListener {
            Intent("com.nama.action").also { intent ->
                intent.putExtra("nama", dashboardViewModel.text.value)
                requireContext().sendBroadcast(intent)
            }
        }
    
        val textView: TextView = binding.textDashboard
        dashboardViewModel.text.observe(viewLifecycleOwner) {
            textView.text …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-broadcast android-14

17
推荐指数
1
解决办法
3626
查看次数

使用Android 14开发应用时遇到的问题

我发现在我的应用程序达到相当大小(例如通过添加多个库)后,运行应用程序会抛出 java.lang.SecurityException: writable dex file '.../code_cache/.overlay/base.apk/classes2.dex' is不允许。

如果我然后删除大部分库,只留下默认添加的库,然后再次运行,它就可以工作。但是,如果我添加一点代码(例如日志),它可能会因相同的错误而失败。

如果我希望它运行时不出现此错误,我必须卸载该应用程序,然后从 Android Studio 再次运行。这非常不方便,因为每次我进行一些更改时,我都必须卸载该应用程序。我无法想象会有人愿意开发这样的 Android 应用程序。

有谁知道这个问题的解决方案?

android dex android-securityexception android-14

15
推荐指数
1
解决办法
7600
查看次数

foregroundServiceType 0x00000001 不是清单文件的服务元素中 foregroundServiceType 属性 0x00000000 的子集

我已经使用 WorkManager 实现了 Foreground Service,它在 API 级别 33 之前都可以正常工作。由于在 API 级别 34 中必须指定 foregroundServiceType,因此我在 Worker 和 Manifest 中指定了它,但收到此错误。

AndroidManifest.xml

所需权限:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

<service
        android:name=".services.DownloadService"
        android:exported="false"
        android:enabled="true"
        tools:node="merge"
        android:foregroundServiceType="dataSync"/>
Run Code Online (Sandbox Code Playgroud)

内部工人:

 setForegroundAsync(
       ForegroundInfo(
            NOTIFICATION_ID,
            getNotification(),
            ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
       )
  )
Run Code Online (Sandbox Code Playgroud)

出现此错误


java.lang.IllegalArgumentException: foregroundServiceType 0x00000001 不是android.os.Parcel.createException(Parcel.java:处 android.os.Parcel.createExceptionOrNull(Parcel.java:3015) 处清单文件的服务元素中 foregroundServiceType 属性 0x00000000 的子集2995)
在 android.os.Parcel.readException(Parcel.java:2978)
在 android.os.Parcel.readException(Parcel.java:2920)
在 android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:6079) )在 android.app.Service.startForeground(Service.java:797) ...

我尝试到处做一些改变,但没有任何效果。

foreground-service android-workmanager android-14

15
推荐指数
3
解决办法
3393
查看次数

由于系统广播中的“RECEIVER_EXPORTED 或 RECEIVER_NOT_EXPORTED”错误,应用内更新应用在 Android 14 中崩溃

我有一个使用应用程序内更新的 Android 应用程序。以 android 14 (API 34) 为目标后,应用程序将因以下错误而无法启动:

\n
FATAL EXCEPTION: main\nProcess: no.norva24.mslam, PID: 8281\njava.lang.RuntimeException: Unable to start activity\nComponentInfo{no.norva24.mslam/no.norva24.mslam.ui.activities.MainActivity}: java.lang.SecurityException: no.norva24.mslam: One\nof RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered\nexclusively for system broadcasts\n    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3782)\n    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)\n    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\n    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)\n    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)\n    at android.os.Handler.dispatchMessage(Handler.java:106)\n    at android.os.Looper.loopOnce(Looper.java:205)\n    at android.os.Looper.loop(Looper.java:294)\n    at android.app.ActivityThread.main(ActivityThread.java:8176)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)\nCaused by: java.lang.SecurityException: no.norva24.mslam: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED\nshould be specified when a receiver isn't being registered …
Run Code Online (Sandbox Code Playgroud)

android in-app-update android-14 android-api-34

14
推荐指数
1
解决办法
6646
查看次数

在 Android 14 上重用媒体投影 Intent

我有一个 Android 屏幕录制应用程序。在我的应用程序中,用户可以直接在应用程序中启动屏幕录制,也可以通过通知中的按钮(绑定到前台服务)启动屏幕录制。

要开始录制,我通过屏幕录制系统对话框检索创建媒体投影的意图: startActivityForResult(activity, mediaProjectionManager.createScreenCaptureIntent(), requestId)

此意图稍后用于创建 MediaProjection,该 MediaProjection 再次用于获取VirtualDisplay屏幕录制的 a 。

为了避免每次用户通过前台服务的通知开始录制时都必须启动屏幕录制系统对话框,我保存了原始文件Intent以在服务中创建媒体投影,然后只需重复使用该文件即可Intent。这在 Android 14 (API 34) 之前都可以正常工作。

在使用 Android 14 预览版进行测试时,我发现这似乎不再可能了。根据抛出的异常,不再允许检索MediaProjection具有相同的Intent或创建具有相同的多个虚拟显示器MediaProjection

FATAL EXCEPTION: main
Process: com.recording.app.staging, PID: 19029
                 java.lang.SecurityException: Don't re-use the resultData to retrieve the same projection instance, and don't use a token that has timed out. Don't take multiple captures by invoking MediaProjection#createVirtualDisplay multiple times on the same instance.
                    at android.os.Parcel.createExceptionOrNull(Parcel.java:3057)
                    at android.os.Parcel.createException(Parcel.java:3041)
                    at …
Run Code Online (Sandbox Code Playgroud)

android android-mediaprojection android-14

6
推荐指数
0
解决办法
1245
查看次数

Android 14 - FirebaseMessagingService 的前台服务类型

当针对 android 14 时,我们应该为清单中的每个服务至少提供一个 foregroundServiceType - https://developer.android.com/about/versions/14/behavior-changes-14#fgs-types

FirebaseMessagingService 应使用哪种 foregroundServiceType?

我应该使用这个https://developer.android.com/about/versions/14/changes/fgs-types-required#remote-messaging吗?

android kotlin firebase-cloud-messaging android-14

6
推荐指数
1
解决办法
2080
查看次数

此应用程序与最新版本的 Android 不兼容。在安卓14中

我的应用程序首次安装到手机上后显示以下警告(仅在 Android 14 中):

This app isn't compatible with the latest version of Android.
check for an update or contact the app's developer.
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能解决这个警告?以及我应该如何调试我的代码以找到问题。

我升级了应用程序库并检查了清单文件是否与 Android 14 存在任何冲突。

这是我的 build.gradle 文件

apply plugin: 'com.android.application'

//repositories {
//    mavenCentral()
//    google()
//    maven {
//        url "https://linphone.org/maven_repository"
//    }
//}

configurations {
    compile.exclude module: 'support-v4'
}

configurations.all {
//    exclude group: 'com.google.firebase', module: 'firebase-core'
    exclude group: 'androidx.recyclerview', module: 'recyclerview'
}

dependencies {
    implementation 'androidx.core:core:1.10.1'
    implementation 'androidx.palette:palette:1.0.0'
    implementation 'androidx.exifinterface:exifinterface:1.3.7'
    implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
    implementation …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio build.gradle android-14

3
推荐指数
1
解决办法
1587
查看次数