标签: android-contentresolver

Android中通过蓝牙进行多连接

您好,我们正在开发通过蓝牙进行的 Android 多人游戏。这是一款多人 LUDO 游戏,4 名玩家相互连接并玩游戏。

我们被困在第三个和第四个玩家的连接中。

private OnMaxConnectionsReachedListener maxConnectionsListener = new OnMaxConnectionsReachedListener() {
    public void OnMaxConnectionsReached() {

    }
};

private OnIncomingConnectionListener connectedListener = new OnIncomingConnectionListener() {
    public void OnIncomingConnection(String device) {
        //rivalDevice = device;
        if(index < 1000)
        {
            clients[index] = device;
            index++;
            Log.d("Khawar", "Khawar"+device);
            if(index == 1)
            {
                //blue.setText(clients[0]);
                mConnection.sendMessage(clients[0], "ConnectionList--Ludofyp309509--"+server+"--Ludofyp309509--"+clients[0]);
            }
            else if(index == 2)
            {
                //blue.setText(clients[0]);
                //red.setText(clients[1]);
                mConnection.sendMessage(clients[0], "ConnectionList--Ludofyp309509--"+server+"--Ludofyp309509--"+clients[0]+"--Ludofyp309509--"+clients[1]);
                mConnection.sendMessage(clients[1], "ConnectionList--Ludofyp309509--"+server+"--Ludofyp309509--"+clients[0]+"--Ludofyp309509--"+clients[1]);
            }
            else if(index==3)
            {
                //blue.setText(clients[0]);
                //red.setText(clients[1]);
                //yellow.setText(clients[2]);
                mConnection.sendMessage(clients[0], "ConnectionList--Ludofyp309509--"+server+"--Ludofyp309509--"+clients[0]+"--Ludofyp309509--"+clients[1]+"--Ludofyp309509--"+clients[2]);
                mConnection.sendMessage(clients[1], "ConnectionList--Ludofyp309509--"+server+"--Ludofyp309509--"+clients[0]+"--Ludofyp309509--"+clients[1]+"--Ludofyp309509--"+clients[2]);
                mConnection.sendMessage(clients[2], "ConnectionList--Ludofyp309509--"+server+"--Ludofyp309509--"+clients[0]+"--Ludofyp309509--"+clients[1]+"--Ludofyp309509--"+clients[2]);
            }
        }
        //Toast.makeText(getBaseContext(), …
Run Code Online (Sandbox Code Playgroud)

android bluetooth android-emulator android-contentresolver android-layout

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

如何获取从 android 10 上的图库中选择的视频的路径

我尝试了很多片段。这就是我现在正在使用的。我知道 MediaStore.Video.Media.DATA 已弃用。不知何故此方法也适用于 android 10,但有时会抛出

android.database.CursorIndexOutOfBoundsException: 请求索引 0,大小为 0

public static String getvideoPath(Context context, Uri uri) {
    try {
        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        LogMessage.v("Document Id:: "+document_id);
        if(document_id!=null){
        document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
        cursor.close();
        cursor = context.getContentResolver().query(
                MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Video.Media._ID + " = ? ", new String[]{document_id}, null);
        cursor.moveToFirst();
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
        cursor.close();
        return path;
        }else
            return getPath(context,uri);
    } catch (Exception e) {
        e.printStackTrace();
        return getPath(context,uri);
    }
}

private static String …
Run Code Online (Sandbox Code Playgroud)

java android path android-contentresolver

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

为什么会出现"无法获取类型:content:// contacts /"

我正在逐步完成"专业Android 4应用程序开发"中的教程.在第5章中,有一个简单的应用程序,演示了如何选择联系人并打印结果.

在我进入应用程序并进行测试后,我收到以下错误:

10-06 11:29:04.596:W/ContentResolver(1073):无法获取类型:content:// contacts /(URI:content:// contacts /,调用用户:android.uid.system:1000,调用包是以下之一:[com.android.keychain,com.android.settings,android,com.android.providers.settings,com.android.inputdevices])

此字符串在以下方法中引用:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact_picker_tester);

    Button  button  = (Button) findViewById(R.id.pick_contact_button);

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent  intent  = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/"));
            startActivityForResult(intent, PICK_CONTACT);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我想也许我做错了什么,所以我从Book源代码中运行了相应的例子并得到了同样的错误.任何想法在这里可能是错的?

android android-contentresolver android-contacts

0
推荐指数
1
解决办法
2481
查看次数

ContentResolver删除多个

我知道可以这样删除记录:

getContentResolver().delete(Events.CONTENT_URI, Events._ID + " =? ", eventId);
Run Code Online (Sandbox Code Playgroud)

其中 eventId 是String array包含(在本例中为事件)的 ID。就我而言,我不想删除一个事件,而是多个事件。所以我有一个包含多个 eventId 的 eventId 数组。我当然可以循环遍历数组并一一删除事件,但是是否也可以仅使用一次调用来删除它们?

java sql android android-contentresolver android-calendar

0
推荐指数
1
解决办法
1440
查看次数

指定为非null的参数为null:参数投影内容提供者Kotlin

我正在尝试从Kotlin文件查询内容提供者。请参见下面的代码:

var URI = Uri.parse("content://myprovider")
var nameUri = Uri.withAppendedPath(URI, "name")
cursor = contentResolver.query(nameUri, null, null, null, null)
Run Code Online (Sandbox Code Playgroud)

When I run this code, I am getting below error

Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter projection
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
    at android.content.ContentResolver.query(ContentResolver.java:802)
Run Code Online (Sandbox Code Playgroud)

Now, when I checked the query method signature in ContentResolver class, this is what it is

public final @Nullable Cursor query(@RequiresPermission.Read @NonNull Uri uri,
        @Nullable String[] projection, @Nullable String selection,
        @Nullable String[] …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-contentprovider kotlin

0
推荐指数
1
解决办法
49
查看次数

_data列在FileProvider uri上不可用

我正在使用FileProvider模式来为文件创建content:// uri,

FileProvider.getUriForFile(this, "com.myapp.provider", file) 
Run Code Online (Sandbox Code Playgroud)

功能。我有清单,provider_paths和所有设置的标准方式,它创建了一个uri content://com.myapp.provider/external_files/music/mysong.mp3

我的问题是,如果我尝试在另一个应用程序中获取真实文件路径,则由于该_data列不存在而无法正常工作(具体来说,日志中的错误是E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 0 columns.)。为了获取真实路径,我使用了非常标准的功能

final String column = MediaStore.Files.FileColumns.DATA;
final String[] projection = { column  };
try {
    cursor = context.getContentResolver().query(uri, projection, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        final int column_index = cursor.getColumnIndexOrThrow(column);
        return cursor.getString(column_index);
    }
} finally {
    if (cursor != null)
        cursor.close();
}
Run Code Online (Sandbox Code Playgroud)

如果我使用其他应用程序共享同一文件,则会生成一个类似uri的uri content://com.otherapp.provider/external_files/music/mysong.mp3,我已经可以从中检索真实的文件路径。有什么想法可以做,以确保我的应用正确地将给定的uri插入到ContentResolver中?contentResolver.insert(...)不允许使用手动功能。我尝试了不同版本的provider_paths.xml,并为给定的uri授予了所有可能的读/写权限,但是我永远无法检索真实路径。

由我生成的uri本身可以正常工作,因为我可以读取文件或播放歌曲,我的问题是我无法检索所需的真实文件路径。 …

android uri file path android-contentresolver

-1
推荐指数
1
解决办法
1805
查看次数