Assigned
Status Update
Comments
vi...@google.com <vi...@google.com> #2
Also confirmed issue persists on 4.4.
mm...@commonsware.com <mm...@commonsware.com> #3
There are a lot of expensive accessories I've purchased or been gifted that quit workin with android 4.2. Android devs need to get on this. 3 broken versions and numerous minor updates and it hasn't even been triaged yet. Completely unprofessional.
vi...@google.com <vi...@google.com> #4
We are loyal to Android as and they treat us like this.. I have a google device and yet it still is not fixed.
mm...@commonsware.com <mm...@commonsware.com> #5
Please fix
vi...@google.com <vi...@google.com> #6
Yes, please fix it. =)
pl...@gmail.com <pl...@gmail.com> #7
I abandoned iPhone to discover something better, but I'm finding a lot of my Bluetooth paired devices won't work properly on android... I hope this gets fixed soon. I don't want to have to buy an iPhone again and suffer with their long agreements and system restrictions.
sa...@gmail.com <sa...@gmail.com> #8
[Comment deleted]
ro...@google.com <ro...@google.com>
ma...@gmail.com <ma...@gmail.com> #9
fix will ya? make the android better more
di...@google.com <di...@google.com> #10
Yes, count me as someone who would like to see this fixed. It apparently isn't fixed in KitKat.
jm...@gmail.com <jm...@gmail.com> #11
I have two nexus devices and this is a regular issue. The kid can't play games properly. Way to replace a working stack with a subpar homebrewed one.
di...@google.com <di...@google.com> #12
Please roll back previous API. This fratura is importante.
di...@google.com <di...@google.com> #13
Android 4.3 killed my super mario :(
di...@google.com <di...@google.com> #14
Please fix, pretty please
mm...@commonsware.com <mm...@commonsware.com> #15
I have a device that worked fine with Bluez and now is broken with Bluedroid. Please add support for devices requiring L2CAP connectivity. From the logs, it seems to try and run L2CAP over GATT/ATT even with devices that are not BLE.
Thanks
Thanks
di...@google.com <di...@google.com> #16
Please fix this!! We want to play with us wii u pro controller!! C'mon Google!!
jm...@gmail.com <jm...@gmail.com> #17
PLEASE GOOGLE, LET US HAVE BLUETOOTH FREEEEEEEEDDDDOOOOOOOOOOOOOOOOOOM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mm...@commonsware.com <mm...@commonsware.com> #18
Google, please fix this issue. many games are unplayable with said issue.
di...@google.com <di...@google.com> #19
Please google, can someone please fix this issue. thanks
jm...@gmail.com <jm...@gmail.com> #20
Would love to see this resolved. Like a handful of others on here I just wanted to sync a bluetooth controller to my Android device to play some games. (I'm not very good at Megaman X with the touchscreen). I know it isn't a huge system issue, but maybe it could be changed anyway?
Games already look great on the Note 3, would be better with my controller.
Thanks in advance!
Games already look great on the Note 3, would be better with my controller.
Thanks in advance!
mm...@commonsware.com <mm...@commonsware.com> #21
Just want to play some Bayou Billy for nes on my Note 3 with wiimote controller please.
Description
1. Obtain a test device that has 1+ MP3 files on it, indexed by the MediaStore, where you have backed up the MP3 file somewhere (as depending on what you try here, it may be cleared)
2. UnZIP the attached project, import into Android Studio (tested on AS 3.4), and run it on the test device -- the Storage Access Framework (SAF) content selector will immediately appear
3. Tap on the "Audio" category in the SAF content selector, then browse to your MP3 file and select it
- What happened.
The app crashes with:
Process: com.commonsware.android.myapplication, PID: 12798
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1337, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/audio:798 flg=0x43 }} to activity {com.commonsware.android.myapplication/com.commonsware.android.myapplication.MainActivity}: java.lang.IllegalArgumentException: Media is read-only
at android.app.ActivityThread.deliverResults(ActivityThread.java:4398)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4440)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalArgumentException: Media is read-only
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146)
at android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:625)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1314)
at android.content.ContentResolver.openOutputStream(ContentResolver.java:1056)
at android.content.ContentResolver.openOutputStream(ContentResolver.java:1032)
at com.commonsware.android.myapplication.MainActivity.onActivityResult(MainActivity.kt:29)
at android.app.Activity.dispatchActivityResult(Activity.java:7462)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4391)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4440)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
- What you think the correct behavior should be.
The MP3 file should be replaced by a 0-byte file, which is what happens if you choose the MP3 file through browsing "internal" storage. Note: if you test this, you will want to restore that MP3 file from the aforementioned backup.
This was tested on a Pixel 3 running Android 9.0. I suspect it is a much broader problem than this.
---------
The crash stems from the MediaDocumentsProvider:
2019-05-25 18:46:46.587 11706-11718/? E/DatabaseUtils: Writing exception to parcel
java.lang.IllegalArgumentException: Media is read-only
at com.android.providers.media.MediaDocumentsProvider.openDocument(MediaDocumentsProvider.java:712)
at android.provider.DocumentsProvider.openAssetFile(DocumentsProvider.java:1214)
at android.content.ContentProvider$Transport.openAssetFile(ContentProvider.java:391)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:251)
at android.os.Binder.execTransact(Binder.java:731)
MediaDocumentsProvider throws that for any write access:
The app simply launches ACTION_OPEN_DOCUMENT, then attempts to open an OutputStream on the supplied Uri:
package com.commonsware.android.myapplication
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.content.Intent
private const val REQUEST_WTF = 1337
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "audio/mpeg"
startActivityForResult(intent, REQUEST_WTF)
}
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
data: Intent?
) {
if (requestCode == REQUEST_WTF) {
if (resultCode == Activity.RESULT_OK && data != null) {
val out = contentResolver.openOutputStream(data.data!!)
out?.close()
}
}
}
}
The problem is that we have no way of specifying on the ACTION_OPEN_DOCUMENT Intent that we intend to write and therefore want to limit the user to writable locations. Given that Android Q/R are putting extra emphasis on us migrating to the Storage Access Framework, this sort of feature is needed. Otherwise, all we can do is detect that we do not have write access (e.g., DocumentFile and canWrite()), then tell the user "sorry, I can't write there", which leads to a bad user experience. Instead, the SAF UI needs to filter out unusable locations for us, such as by us passing true for an EXTRA_READ_WRITE or EXTRA_SHOW_WRITEABLE_LOCATIONS or EXTRA_CAN_I_PLZ_WRITE_K_THX_BYE extra.
Thanks for considering this!