tyle="margin:20px 0px 0px; padding:0px; line-height:26px; font-family:arial">


1、首先在AndroidManifest.xml中的<manifest>中加入android:sharedUserId="共享id"----具有相同id的apk可以不受限制访问。

2、根据包名创建Context,在Activity下有提供方法createPackageContext能够依据包名创建。

3、获取共享的Apk资源。

注意:

1、Activity中的findViewById()与View中的findViewById()区别在于:

Activity需要对setContextView()后的Layout才能由findViewById()获得View。

View只需要有对象即可由findViewById()获得在View中包含id的View。

2、在资源获取方面主要获取那个apk下的资源主要是由Context决定。


在资源apk没安装前:

资源文件安装后:


主apk包名:com.app.share;

资源apk包名:com.app.share2;

主Activity中获取资源apk中R,并且生成Layout对id为button1的按钮设置监听。

view plain
  1. publicclassStartActextendsActivity {

  2. /** Called when the activity is first created. */

  3. @Override

  4. publicvoidonCreate(Bundle savedInstanceState) {

  5. super.onCreate(savedInstanceState);

  6. // setContentView(R.layout.main);

  7. Button btn =newButton(this);

  8. btn.setText("TO SECOND");

  9. btn.setOnClickListener(newOnClickListener() {

  10. @Override

  11. publicvoidonClick(View v) {

  12. // TODO Auto-generated method stub

  13. Intent intent =newIntent(StartAct.this, SecontAct.class);

  14. StartAct.this.startActivity(intent);

  15. }

  16. });

  17. this.setContentView(btn);

  18. try{

  19. Context other =this.createPackageContext("com.app.share2", CONTEXT_IGNORE_SECURITY|CONTEXT_INCLUDE_CODE);

  20. Class<?> c = other.getClassLoader().loadClass("com.app.share2.R");

  21. Class<?>[] cl = c.getClasses();

  22. intb =0;

  23. for(inti =0; i < cl.length; i++) {

  24. Log.d("TAG", cl[i].getSimpleName());

  25. Field field[] = cl[i].getFields();

  26. for(intj =0; j < field.length; j++) {

  27. Log.d("TAG","NAME:"+field[j].getName()+"--VALUE:"+field[j].getInt(field[j].getName()));

  28. if(field[j].getName().equals("button1")) {

  29. b = field[j].getInt(field[j].getName());

  30. Log.d("TAG","--------id");

  31. }

  32. };

  33. }

  34. View v = LayoutInflater.from(other).inflate(R.layout.main,null);

  35. Button btn1 = (Button) v.findViewById(b);

  36. btn1.setOnClickListener(newOnClickListener() {

  37. @Override

  38. publicvoidonClick(View v) {

  39. // TODO Auto-generated method stub

  40. Log.d("TAG","BUTTON FROM Share2");

  41. Toast.makeText(StartAct.this,"BUTTON FROM Share2", Toast.LENGTH_SHORT).show();

  42. }

  43. });

  44. this.setContentView(v);

  45. }catch(NameNotFoundException e) {

  46. // TODO Auto-generated catch block

  47. e.printStackTrace();

  48. }catch(ClassNotFoundException e) {

  49. // TODO Auto-generated catch block

  50. e.printStackTrace();

  51. }catch(IllegalArgumentException e) {

  52. // TODO Auto-generated catch block

  53. e.printStackTrace();

  54. }catch(IllegalAccessException e) {

  55. // TODO Auto-generated catch block

  56. e.printStackTrace();

  57. }

  58. }

  59. }


资源apk包Layout

view plain
  1. <?xmlversion="1.0"encoding="utf-8"?>

  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

  3. android:orientation="vertical"

  4. android:layout_width="fill_parent"

  5. android:layout_height="fill_parent"

  6. >

  7. <TextView

  8. android:layout_width="fill_parent"

  9. android:layout_height="wrap_content"

  10. android:text="Share2"

  11. />

  12. <Buttonandroid:text="Button"android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button>

  13. </LinearLayout>

更多相关文章

  1. Android(安卓)程序获取、设置铃声和音量
  2. Android的第三个应用---短信发送器
  3. Android(安卓)程序获取、设置铃声、音量、静音、扬声器
  4. android accessibility
  5. 【Android(安卓)Audio】Android(安卓)Audio System 之二:AudioFli
  6. android NDK/JNI-实例开发流程
  7. Android教程之android数据库编程
  8. 在SQLite数据库中获取新插入数据自增长的ID值(传智播客笔记)
  9. Android(安卓)JNI和NDK学习(09)--JNI实例二 传递类对象

随机推荐

  1. Android(安卓)4.2.2原生Launcher修改使之
  2. 要学习的知识—做个笔记方便查找
  3. Android(安卓)application context/activ
  4. Android(安卓)Keyboard/Touch Panel分析
  5. kotlin初窥之Kotlin Android(安卓)Extens
  6. iphone开发之常用控件的使用详解
  7. Android应用程序启动过程源代码分析
  8. android架构介绍
  9. 探究Android(安卓)中 WebView 与 JS 的交
  10. Android(安卓)cts all pass 全攻略