我正在开发一个Cordova应用程序,我想在设备(重新)启动时运行。现在我实现了一些原生Android代码,使其在Android 5.0.2(Galaxy Tab S2)上运行,这很好用。但是,在运行4.4.4和4.2.2(Minix Z64和Minix X5)的设备上运行应用程序时,我遇到了一些麻烦。
我为创业公司所做的活动:
public class StartupActivity extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(i);
}
}
}
我的清单文件中的一些信息
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:enabled="true" android:exported="true" android:name="package.StartupActivity" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
所以问题是该应用程序在我的Galaxy Tab S2上工作正常,因为它在启动时启动。但另外两台运行不同版本Android的设备没有响应此请求。
我对Android开发并不熟悉,但由于这是在更新版本的Android上工作,我认为这是一个兼容性问题,如果是这样,是否有解决方法?最好不要使设备生根。
答案 0 :(得分:1)
通过在MainActivity.class
前面声明应用的包名称并调用标记FLAG_ACTIVITY_NEW_TASK
而不是FLAG_ACTIVITY_CLEAR_TOP
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MY_PACKAGE_NAME.MainActivity.class);
serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(serviceIntent);
}