Android - Java - 在设备启动时运行应用程序

时间:2014-09-19 12:51:56

标签: java android

我在这里遇到一些问题,我的代码似乎是正确的,但它没有做我期待的事情。

我有一个应用程序,我想在设备启动时运行。但是当设备启动时,它的应用程序不会运行,这正是我所期待的。

首先在我的Manifest中,我添加了RECEIVE_BOOT_COMPLETED的使用权限:

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

然后在我的Manifest中我在应用程序中添加了一个接收器和活动:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".BootReceiver"
            android:enabled="true"
            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>

        <activity
            android:name=".BootReceiver"
            android:label="@string/title_activity_boot_receiver" >
        </activity>
    </application>

然后我创建了一个看起来像这样的BootReceiver Activity:

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

public class BootReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, MainActivity.class);  
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);  
    }
}

当我安装应用程序时,启动设备时,应用程序在设备启动时无法正常运行。

我不明白我在这里做错了什么。我的代码错了吗?有人有任何想法吗?

4 个答案:

答案 0 :(得分:2)

BootReceiver不是你的Activity它是扩展广播接收器的类。

更新你的清单,这就够了

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


<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".BootReceiver"
        android:enabled="true"
        >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
         />
        </intent-filter>
    </receiver>


</application>

答案 1 :(得分:1)

第1步:摆脱<activity android:name=".BootReceiver" ...,因为您没有名为Activity的{​​{1}}。

步骤2:摆脱BootReceiver,因为广播上通常不会使用类别,但绝对不会在这里使用。

步骤3:摆脱<category android:name="android.intent.category.DEFAULT" />,因为这表明广播的发件人必须持有该权限,这可能不是真的。

您将看到一个看起来更像的清单:

android:permission="android.permission.RECEIVE_BOOT_COMPLETED"

(来自this sample app

答案 2 :(得分:0)

这很奇怪,因为你用Manifest和代码提到的所有内容似乎都很好...... 那么你的意思是在Boot之后没有运行MainActivity吗?

顺便说一下,我在我的Manifest中使用了它并且工作正常:

   <receiver
        android:name="com.example.BootMeUp"
        android:enabled="true"
        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>

答案 3 :(得分:0)

试试这个:这段代码适合我......

<receiver
        android:name="your.package.name.BootReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>

    </receiver>