我在Android应用程序中尝试读取android sms数据库时遇到此崩溃。用于读取android sms数据库的代码类似于以下代码段:
String SMS_URI = "content://sms/";
Uri uri = Uri.parse(SMS_URI);
Cursor cursor = myContext.getContentResolver().query(uri, null, null, null, null);
这是我的应用程序与android sms数据库交互的唯一地方。正在为sms数据库抛出降级错误。
我遇到了以下崩溃:
java.lang.RuntimeException: android.database.sqlite.SQLiteException: Can't downgrade database from version 58 to 55
at to.talk.utils.ExceptionThrowingFutureTask$1.run(ExceptionThrowingFutureTask.java:32)
at java.lang.Thread.run(Thread.java:856) Caused by: java.util.concurrent.ExecutionException: android.database.sqlite.SQLiteException: Can't downgrade database from version 58 to 55
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:223)
at java.util.concurrent.FutureTask.get(FutureTask.java:82)
at to.talk.utils.ExceptionThrowingFutureTask.done(ExceptionThrowingFutureTask.java:22)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
... 1 more Caused by: android.database.sqlite.SQLiteException: Can't downgrade database from version 58 to 55
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:184)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
at android.content.ContentResolver.query(ContentResolver.java:372)
at android.content.ContentResolver.query(ContentResolver.java:315)
at to.talk.app.features.growth.SMSReader.readSmsAndGetInviteList(SMSReader.java:39)
应用程序大部分时间都可以正常工作,并且永远不会在本地崩溃,但是对于某些用户来说它会崩溃。在崩溃的设备\环境中没有明显的模式。如果有人能帮助我,我真的很感激。
我在这里发现了类似的崩溃:
[https://crash-stats.mozilla.com/report/list?signature=android.database.sqlite.SQLiteException%3A%20Can%27%27t%20downgrade%20database%20from%20version%2033%20to% 2032%20原子%20android.database.DatabaseUtils.readExceptionFromParcel%28DatabaseUtils.java%29] [1] 虽然在这种情况下它可能是他们自己的数据库之一,不像我的android sms数据库。
答案 0 :(得分:2)
我可能会迟到,但这是我的2美分。
您正在使用的提供程序(设备的sms提供程序)读取和写入您(作为第三方应用程序)无法访问它的数据库。它可以作为你们俩之间的媒介。
看起来获得此异常的设备更新了sms数据库(或者更准确地降级)。这可以通过Android版本升级(由OEM)或在具有root访问权限时不小心更改内容来实现。
有时,当设备获得Android操作系统更新时,某些内容会出错。要么是因为安装不好,要么是因为更新有问题。在这种情况下,有人搞砸了短信服务提供商。
最重要的是,您(作为第三方应用程序)无法对其进行任何操作,异常使用try-catches包装所有短信提供程序查询。使用相同提供商的所有应用都应面临与您完全相同的问题。