第一个进程的MyContentProvider.Java
public class MyContentProvider extends ContentProvider {
public static final int person_dir=0;
public static final int person_item=1;
public static final String AUTHORITY="com.app.provider";
private static UriMatcher uriMatcher;
private MyDatabaseHelper dbHelper;
static {
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
// if resource is AUTHORITY/person,back person_dir,
// if resource is AUTHORITY/person/#,back person_item,
uriMatcher.addURI(AUTHORITY,"person",person_dir);
uriMatcher.addURI(AUTHORITY,"person/#",person_item);
}
}
剩下的就是一些方法,在该程序内成功使用ContentResolve调用person表。
第一个进程的AndroidManifest.xml文件
<provider
android:name=".MyContentProvider"
android:authorities="com.app.provider"
android:permission="com.example.provider"
android:readPermission="com.test_3"
android:enabled="true"
android:exported="true">
</provider>
第二个进程的MainActivity.java文件
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private Broaddynamic broaddynamic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_query=findViewById(R.id.button_query);
btn_query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri uri=Uri.parse("content://com.app.provider/person/");
ContentResolver resolver=getContentResolver();
Cursor cursor=resolver.query(uri,null,null,null,null);
if (cursor!=null){
while (cursor.moveToNext()){
int age=cursor.getInt(cursor.getColumnIndex("age"));
int id=cursor.getInt(cursor.getColumnIndex("_id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
Log.d("test2","id is "+id);
Log.d("test2","name is "+name);
Log.d("test2","age is"+age);
}
cursor.close();
}
}
});
}
}
第二个进程的Mainfest文件
<uses-permission android:name="com.app.provider"/>
<uses-permission android:name="com.example.test"/>
<uses-permission android:name="com.example.provider"/>
运行显示E/ActivityThread: Failed to find provider info for com.app.provider