我在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;
}
}
我的问题是:
我希望您了解这种情况,并提前感谢您。
----------------------------------------- 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'已停止” 当然,如果我启动应用程序,它可以工作,......
答案 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 );
}