1

BroadcastReceiver のクラスを動的にロードしようとしていますが、この問題で 2 週間以上立ち往生しています。それは私を夢中にさせ、プロジェクトは締め切りに近づいています。

どんな助けでも感謝します。

このコードを使用して、dex クラス ローダーを呼び出します。

DexClassLoader classLoader = new DexClassLoader(dexPath.getAbsolutePath(), optimizedDirectory.getAbsolutePath(), null, getClassLoader() );
                Class<?> dcl;
                dcl = classLoader.loadClass("com.example.mydexbuilddemo.action.UseRun");
                WorkFlow runControl = (WorkFlow) dcl.newInstance();
                runControl.runMyWork(v.getContext());

次に、上記のコードでこのクラスを呼び出します。

public class UseRun implements WorkFlow {@Override
public void runMyWork(Context context) {
    // TODO Auto-generated method stub
    Echo.showEcho(context);
    context.sendBroadcast(new Intent(context, MyOnBootReceiver.class));
}}

次に、このクラス UserRun が MyOnBootReceiver.class を呼び出します

そのため、DexClassLoader は UserRun クラスのロードに成功しましたが、UserRun クラスは MyonBootReceiver.class を呼び出すことができませんでした。

logcat では、UserRun クラスの実行後にエラーや何も返されません。

それは成功を示します:

Echo.showEcho(context);

しかし、これはロードされません:

context.sendBroadcast(new Intent(context, MyOnBootReceiver.class));

MyOnBootReceiver.class コンテンツ:

public class MyOnBootReceiver extends BroadcastReceiver {@Override
public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "MY TOAST SHOW", Toast.LENGTH_SHORT).show();
}   }

このチュートリアルに従って、このプロジェクトをビルドします。

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FhsDu+%28Android+Developers+Blog%29

理論的にはこれでうまくいくはずです

また、ここに Manifest.xml があります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mydexbuilddemo"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
     >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <receiver android:name="com.example.demo2.act.MyOnBootReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>       


</application>

Shelvin Suggestion からの LOG CAT (エラー):

 00:20:44.783: D/dalvikvm(6997): ODEX file is stale or bad; removing and retrying (/data/data/com.example.mydexbuilddemo/app_dexout/secondary_dex.dex)
 00:20:44.803: D/dalvikvm(6997): DexOpt: --- BEGIN 'secondary_dex.jar' (bootstrap=0) ---
 00:20:45.163: D/dalvikvm(6997): DexOpt: --- END 'secondary_dex.jar' (success) ---
 00:20:45.163: D/dalvikvm(6997): DEX prep '/data/data/com.example.mydexbuilddemo/app_dex/secondary_dex.jar': unzip in 19ms, rewrite 360ms
 00:21:09.837: D/dalvikvm(9886): GC_FOR_ALLOC freed 84K, 8% free 17207K/18536K, paused 15ms, total 15ms
 00:21:09.877: D/dalvikvm(9886): GC_CONCURRENT freed <1K, 7% free 19509K/20844K, paused 3ms+3ms, total 16ms
 00:21:10.017: D/libEGL(9886): loaded /system/lib/egl/libEGL_adreno200.so
 00:21:10.017: D/libEGL(9886): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
 00:21:10.017: D/libEGL(9886): loaded /system/lib/egl/libGLESv2_adreno200.so
 00:21:10.077: D/OpenGLRenderer(9886): Enabling debug mode 0
 00:21:15.803: D/GestureDetector(9886): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 11 mFalseSizeCnt:0
 00:21:15.803: D/USE RUN(9886): use my run work 
 00:23:10.225: D/GestureDetector(9886): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 13 mFalseSizeCnt:0
4

0 に答える 0