我需要在我的Flex Mobile应用程序中使用Android SDK显示用Java编写的Activity。我已经看到它使用Map ANE完成,但找不到任何示例代码或任何类型的东西。我已经创建了我的ANE工作所需的Java和ActionScript代码(创建了活动,真正桥接Java和AS3所需的所有类,事件和方法都在那里),我只是无法弄清楚如何添加它到了舞台。我知道它不能添加到DisplayList中,我很好,它是一个舞台对象。
如果它有帮助,我试图使用MediaPlayer显示视频(由于使用AS3 / Flex完成MP4流媒体问题)。
对迈克尔(2012年8月27日@MST上午9:44):
08-27 09:27:07.836: I/CS VideoInit(2567): context is set
08-27 09:27:07.836: I/CS VideoInit(2567): intent is instantiated
08-27 09:27:07.836: I/ActivityManager(349): START {cmp=air.AndroidANETesting2/xi.video.android.extension.VideoActivity u=0} from pid 2567
我的活动的第一行是
Log.i("CS VideoActivity","Made it inside the activity somehow");
以下是我的Java。这是init函数:
VideoInit.context = context;
Log.i("CS VideoInit","context is set");
Intent intent = new Intent( context.getActivity(), VideoActivity.class );
Log.i("CS VideoInit","intent is instantiated");
context.getActivity().startActivity( intent );
Log.i("CS VideoInit","Activity is started");
context.dispatchStatusEventAsync("PLAY", "PLAY");
这是我的VideoActivity onCreate():
super.onCreate(savedInstanceState);
Log.i("CS VideoActivity","Made it inside the activity somehow");
我的Manifest for good measure(只是申请部分):
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".VideoActivity"
android:label="@string/title_activity_video" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
更新(2012年8月27日上午10:52 AM MST) 经过进一步调查(或试错,无论你想要什么),我决定将startActivity()行抛入try {} catch(Throwable e)以查看它抛出的错误(如果有的话)。有趣的是,它抛出了这个。
08-27 10:49:41.406: I/CS VideoInit(7786): Unable to find explicit activity class {air.AndroidANETesting2.debug/xi.video.android.extension.VideoActivity}; have you declared this activity in your AndroidManifest.xml?
看来我需要重新检查我的Android Manifest文件。
答案 0 :(得分:5)
实际上很容易。
您需要在ANE中创建一个实现android.app.Activity的类,然后从FREFunction中,只需使用FREContext中基本Activity实例的startActivity函数。
因此,在函数中,让我们用Intent开始一个活动:
public class ExampleFunction implements FREFunction
{
@Override
public FREObject call( FREContext context, FREObject[] passedArgs )
{
Intent intent = new Intent( context.getActivity(), ExampleActivity.class );
context.getActivity().startActivity( intent );
}
}
然后在实际的Activity实现中:
public class ExampleActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
// Do your stuff here, like create views, buttons etc
}
}
此活动将显示在您的应用程序的顶部。如果您愿意,可以使用对FREContext的静态引用将事件/数据传递回应用程序。
您还需要在清单application-tag中的-app.xml中添加活动:
<application> <activity android:name="package.ExampleActivity"></activity></application>