2014-01-18 34 views
1

我有一个ANE(Adobe本机扩展)自动启动后BOOT_COMPLETED。它作为监听电话状态更改的服务运行。一切工作正常,直到我需要把主要的AIR活动放在前面才能获得用户输入。我知道如何从服务中获取上下文,但不知道FREContext。 我已经试过这样:如何从上下文获取FREContext?

myANEContextClass myANEContext = new myANEContextClass(); 
    Activity myAIRActivity = myANEContext .getActivity(); 
    Intent in = new Intent(myAIRActivity,myAIRActivity.getClass()); 
    in.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

但它不工作,我得到错误:

E/AndroidRuntime(3451): java.lang.UnsatisfiedLinkError: Native method not found: com.adobe.fre.FREContext.getActivity:()Landroid/app/Activity; 

E/AndroidRuntime(3451): at com.adobe.fre.FREContext.getActivity(Native Method) 

但我认为这个过程是有,因为后来我得到:

I/ActivityManager(368): Process air.myANEApp (pid 3451) (adj 5) has died. 

所以必须是一种方法来从过程中获取FREContext

回答

2

为了使它更通用的一点,你应该使用类似以下内容:

PackageManager pm = context.getPackageManager(); 
Intent mainAppIntent = pm.getLaunchIntentForPackage(context.getPackageName()); 
mainAppIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
context.startActivity(mainAppIntent); 

这它从上下文中提取软件包,这应该是ANE所包装的应用程序。因此,它将启动ANE所包装的应用程序,而不是硬编码应用程序。

+0

这里是什么类型的对象是'context'?它是Android上下文还是FREContext? –

+1

'context'是您的应用程序上下文,您可以通过'freContext.getActivity()从FREContext获取。getApplicationContext()' – Michael

0

我解决了它重新启动像这样的应用程序:

Intent in = arg0.getPackageManager().getLaunchIntentForPackage("air.myANEApp"); 
in.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 
      |Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 
      |Intent.FLAG_ACTIVITY_NEW_TASK); 

arg0.startActivity(in) 
0

我不认为你应该自己创建扩展类。 有一个人here处理同样的问题,但显然的解决方案看起来多一点安全/清晰...