【问题标题】:Start Flex Mobile Application on Android startup在 Android 启动时启动 Flex 移动应用程序
【发布时间】:2013-09-04 17:40:59
【问题描述】:

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

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

<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”是指应用程序还是我不需要它?

希望您能理解这种情况,并在此先感谢您。

------------------------------编辑-- --------------------------------------

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

<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' 已停止” 当然,如果我启动应用程序,它就可以工作,...

【问题讨论】:

  • 我的理解是在您的广播接收器中,您正在接收 BOOT_COMPLETED 意图并启动服务,您现在需要什么?对不起,如果我错过了重点
  • 好吧,我不能为 BOOT_COMPLETED 设置接收器,因为清单在 flex 应用程序上,而监听器本身在本机端,因为我们不能用 flex 来做,

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


【解决方案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 );
}

【讨论】:

  • 只是一个问题,在“/.AppEntry”上我放了mxlm文件的名字吧?
  • 问题是我在重新启动设备后收到此错误消息:不幸的是,应用程序“...”停止了。
  • 不,保持上面的代码不变,不要更改“/.AppEntry”。此代码正在确定包含上下文的应用程序的正确入口点,因此您无需更改任何内容。
  • 我遇到的问题是否可能是因为监听器正在工作,但我在构建 ANE 时犯了一个错误,所以它找不到接收器?
  • 听着,我有原生项目的包,来自原生扩展的文件包,还有我放入ExtensionContext.createExtensionContext(, );的那个也是extension.xml中的ID,对吧?这里的 EXTENSION_PACKAGE 是哪一个?我在清单中放入接收器?
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2015-10-28
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多