我在这里遇到一些问题,我的代码似乎是正确的,但它没有做我期待的事情。
我有一个应用程序,我想在设备启动时运行。但是当设备启动时,它的应用程序不会运行,这正是我所期待的。
首先在我的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);
}
}
当我安装应用程序时,启动设备时,应用程序在设备启动时无法正常运行。
我不明白我在这里做错了什么。我的代码错了吗?有人有任何想法吗?
答案 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>