在启动Android应用程序没有运行(Android Application not running

2019-10-17 03:03发布

我是应该重启手机不断的设定次数基本的Android应用程序。 为了做到这一点,我需要在手机启动时启动的应用程序。 为了这一点,我基本上按照上的说明, 在这里 ,添加权限清单,并创建一个启动活动一个BroadcastReceiver类。 下面是我的一些相关的代码:

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    System.out.println("StartMyServiceAtBootReceiver called.");

    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        // Intent activityIntent = new Intent("com.example.rebooter.MainActivity");
        Intent activityIntent = new Intent(context,MainActivity.class);
        activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(activityIntent);
    }
}

}

从清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.rebooter"
android:versionCode="1"
android:versionName="1.0" >

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </activity>

    <service
        android:name=".RebootManager"
        android:label="Reboot Manager" >
        <action android:name="com.example.rebooter.RebootManager" />
    </service>

    <receiver android:name=".StartMyServiceAtBootReceiver"
        android:enabled="true"
        android:exported="true"
        android:label="StartMyServiceAtBootReceiver" >
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </receiver>       

</application>

在Eclipse仿真器,应用程序似乎正常工作。 也就是说,虽然我的模拟器的根源并非是和手机不执行重新启动命令正确,我也看到,在启动时,正确的活动开始。

现在,当我尝试它运行Android 4.0.4特定的系统上,一切都在应用正确除非在启动时启动工作。 有任何想法吗?

我试图消除任何硬件问题的可能性(因为我没有使用市售发布的手机)通过安装其他应用程序在启动时启动,并证实它确实不开机启动时,它确实正在运行的应用下现身作为启动后缓存的过程。

我将不胜感激任何帮助。 让我知道如果你需要任何额外的信息。

Answer 1:

有一些问题在这里。

首先,你忘了张贴StartMyServiceAtBootReceiver ,你期待得到在开机时间控制组件,所以我们无法对是否有与它任何特别的问题发表评论。

其次,除非有明确地执行你的组件(例如,用户推出的一个MainActivity从主屏幕), StartMyServiceAtBootReceiver将永远不会被调用,在Android 3.1+。 确保你试图在重新启动之前运行您的活动,并看看是否有帮助。

第三,你实施了构造StartupManager ,这是一个坏主意。 请将这个逻辑onCreate()

四,您的代码可能会在构造函数崩溃,因为getApplication()将不会在代码在这一点上返回一个有效的价值,尤其是因为你没有链父类的构造函数。 同样,移动此代码onCreate()将在这里帮助。

第五,从开始一个活动onCreate()服务的(更不用说它的构造函数)是非常不寻常的,而且不能被用户理解。 此外,如果该服务没有做别的,你可以很容易地开始从活动StartMyServiceAtBootReceiver并跳过StartupManager完全。

第六,你有<intent-filter>您服务元素,如果你期待第三方开发者调用这些服务。 如果是这样的话,罚款。 如果没有,请删除<intent-filter>元素,并使用明确的Intents的您的应用程序代码的其余部分中引用它们(例如, new Intent(this, StartupManager.class)更好的安全性。 或者,添加android:exported="false"如果删除了这些服务,虽然这是自动的<intent-filter>元素。



文章来源: Android Application not running at startup