我有一个用Xamarin编写并移植到Android的测试应用程序。其中包含清单文件中包含以下内容的导出的内容提供程序。
<provider android:name="md5c7302988dec23c3faede6ee623ad91b8.AppStateProvider" android:exported="true" android:authorities="com.example.myapp.AppStateProvider"/>
但是我不确定如何从用Android Studio编写的独立的独立Android应用程序查询和打印数据。我发现了各种教程和内容,但是其中许多使用较旧的游标方法(而不是Content Resolver)已经过时了,因此会引发很多错误并导致应用程序崩溃。
请遵循什么正确的方法来在应用之间获取此数据。
编辑:这就是我使用ContentResolver的方式
Uri yourURI = Uri.parse("content://com.example.myapp.AppStateProvider/AppState");
ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);
try {
Cursor yourCursor = yourCR.query(yourURI, null, null, null, null);
Log.i("stuff", String.valueOf(yourCursor));
} catch (RemoteException e) {
e.printStackTrace();
}
但这会崩溃:
Unable to start activity ComponentInfo{com.cpreader/com.cpreader.MainActivity}: java.lang.SecurityException: Unknown packagename
删除CP代码后,应用程序运行正常(只是一个基本的空Hello World活动)
编辑:
我修改了CP名称以使用名称而不是授权,并按预期得到了错误
Failed to find provider info for md5c7302988dec23c3faede6ee623ad91b8.AppStateProvider
这意味着我具有正确的授权机构名称,并且可以找到该提供程序,因此带有软件包名称的其他内容使该程序崩溃了
EDIT2:
以下代码也因相同的错误而崩溃:
Caused by: java.lang.SecurityException: Unknown packagename
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
String filePath = cursor.getString(cursor.getColumnIndex("Name"));
cursor.close();
Log.i("stuff", filePath);