Android(安卓)使用ContentProvider 实现多个activity灵活显示,实现Intent隐式传值.
1. 在Manifest.xml添加 Provider关联
<application ...>
<providerandroid:name="TestProvider"android:authorities="com.example.testandroid"/>
<activityandroid:name="com.example.testandriod.ThirdActivity">
<intent-filter>
<actionandroid:name="android.intent.action.VIEW"/>
<dataandroid:mimeType="com.cn.***/test"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity>
...
</activity>
</application>
其中的<data>标签是标识你的activity,必须采用A/B的形式。
2.建立对应的Provider类
public classTestProvider extendsContentProvider {
@Override
public int delete(Uri arg0,String arg1, String[] arg2) {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getType(Uri arg0) {
// TODO Auto-generated method stub
Log.d("debug", arg0+"");
return"com.cn.***/test";//找xml文件中对应的activity.
}
@Override
public Uri insert(Uri arg0,ContentValues arg1) {
// TODO Auto-generated method stub
returnnull;
}
@Override
publicboolean onCreate() {
// TODO Auto-generated method stub
returnfalse;
}
@Override
public Cursorquery(Uri arg0,String[] arg1, String arg2,String[] arg3,
String arg4) {
// TODO Auto-generated method stub
returnnull;
}
@Override
public int update(Uri arg0,ContentValues arg1, String arg2, String[] arg3) {
// TODO Auto-generated method stub
return 0;
}
}
其中getType的返回值必须是和你的Manifest.xml文件中配置的<data mimeType="xxxx">xxx要完全一致。3.在activity中实现如下代码:
Intent intent =new Intent();
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("content://com.example.testandroid/one")); // 这段常量会传递给上面的Provider的getType函数;
intent.setAction("android.intent.action.VIEW");
startActivity(intent);
即可启动任意activity,并传值.
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android不支持宽字符 (wchar_t*,及有关宽字符的一些函数运行结果
- Android(安卓)Audio代码分析9 - AudioTrack::write函数
- MAC 配置android adb命令的环境变量
- Android常用代码集合
- Android:控件anim动画效果xml文件属性值含义