将Intent发送到单独的DEX文件中的活动时,我应该使用什么上下文?

时间:2013-05-10 06:55:59

标签: android dynamic android-intent loading dex

我有一个Android活动位于一个单独的dex文件中,我想从我的Android应用程序启动。启动意图后我得到一个例外。

Didn't find class "com.example.testproject.SampleActivity" on path: /data/app/com.example.testproject.apk

我构建了一个活动类,让Eclipse将它放在一个dex文件中

public class SampleActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_sample);
    setContentView(getIntent().getIntExtra("LAYOUT", -1));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.sample, menu);
    return true;
}

}

我将该活动添加到我的主要应用清单文件

    <activity
        android:name="com.example.testproject.SampleActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity> 

我还将activity_sample.xml布局文件添加到我的主应用程序项目中,以便我可以通过Intent将其传递给其他活动

然后从主应用程序我建立一个意图调用其他活动如下

            String p = Environment.getExternalStorageDirectory().getPath() + "/classes.dex";
            ClassLoader dexLoader = new DexClassLoader(p, getCacheDir().getAbsolutePath(), null, getClassLoader());

            try {
                Class<?> activityClass = dexLoader.loadClass("com.example.testproject.SampleActivity"); 
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.setClass(getApplicationContext(), activityClass);
                intent.putExtra("LAYOUT", R.layout.activity_sample);
                startActivity(intent);
                finish();  

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

该类加载正常,但在调用startActivity()之后,我得到了上面提到的异常。这似乎与intent的上下文有问题,因为异常显示在/data/app/com.example.testproject.apk中查找的类,它不在apk中(dex文件在sd上)卡)。

有任何想法如何解决此问题?

1 个答案:

答案 0 :(得分:1)

这不起作用。必须在apk的主要classes.dex中定义apk的AndroidManifest.xml中指定的活动。