在Android启动时启动Flex Mobile Application

时间:2013-09-04 17:41:00

标签: java android actionscript-3 flex air-native-extension

我在android启动时启动应用程序时出现问题,问题是如何将清单(从Flash构建器上的移动应用程序项目中)的“android.permission.RECEIVE_BOOT_COMPLETED”上的侦听器放到本机扩展中??

基本上在清单上我有这样的东西:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application>
       <receiver android:enabled="true" android:name="EXTENSION_PACKAGE.application.receivers.ApplicationStartupReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
       </receiver>
    </application>

在本机方面:听众应该像:

package EXTENSION_PACKAGE;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;

public class ApplicationStartupReceiver extends BroadcastReceiver implements FREFunction {

     @Override
        public void onReceive(Context context, Intent intent) {
            if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
                Intent serviceIntent = new Intent("com.myapp.MySystemService");
                context.startService(serviceIntent);
            }
        }

    @Override
    public FREObject call(FREContext arg0, FREObject[] arg1) {
        // TODO Auto-generated method stub
        return null;
    }
}

我的问题是:

  • “EXTENSION_PACKAGE”是本机项目的包名称还是扩展名ID?
  • “。application”是指应用程序还是我不需要它?

我希望您了解这种情况,并提前感谢您。

----------------------------------------- EDIT-- --------------------------------------

经过几次尝试和测试,我改变了这些值:

<receiver android:enabled="true" android:name="NATIVEPROJECTPACKAGE.application.receiver.ApplicationStartupReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

并且:

Intent serviceIntent = new Intent("air.APPLICATION_ID"); // from the APPLICATION.XML

现在它似乎工作,现在唯一的问题是,它在Android启动时崩溃,我收到一个警告说:“不幸的是,应用程序'APPLICATION NAME'已停止” 当然,如果我启动应用程序,它可以工作,......

1 个答案:

答案 0 :(得分:1)

首先,请仔细检查您是否使用了正确的软件包名称,因为您已将软件包列为EXTENSION_PACKAGE,但随后将 application.receivers 添加到清单中的定义中。它可能应该如下所示:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application>
   <receiver android:enabled="true" android:name="EXTENSION_PACKAGE.ApplicationStartupReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
   </receiver>
</application>

现在,当接收器被调用时,我假设您只想启动AIR应用程序?要做到这一点比仅使用您指定的操作创建Intent要复杂一些。 Android无法处理您正在呼叫的操作。您需要做的是从上下文中找到您的应用程序条目并启动它的意图,如下所示:

if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()))
{
    String componentName = context.getPackageName() + "/.AppEntry";
    Intent i = new Intent( Intent.ACTION_MAIN );
    i.setComponent(ComponentName.unflattenFromString( componentName ));
    i.addCategory( Intent.CATEGORY_LAUNCHER );
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity( i );
}