启动完成广播不起作用

时间:2016-01-05 13:02:44

标签: android android-service android-broadcast android-broadcastreceiver android-bootstrap

我正在尝试启动活动,重新启动手机,然后启动应用程序或在启动完成时向我显示吐司

 class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)) {
        Intent serviceIntent = new Intent(context, MyIntentService.class);
        context.startService(serviceIntent);
    }
}

}

这是我的Broadcaste接收器代码

 class MyIntentService extends Service {
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    // do something when the service is created
}

}

这是我的服务代码。

清单

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">


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

    <service android:name=".MyIntentService"></service>
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

</application>
我尝试了很多不同的代码,但没有人为我工作,所以任何人都可以帮我纠正这段代码

2 个答案:

答案 0 :(得分:1)

你的BroadcastReceiver将永远不会被调用,因为你在它的清单条目中有这个:

    android:exported="false"

删除它。

注意:您还需要确保在手机上安装应用后至少手动启动一次。否则,您的BroadcastReceiver将无法获得BOOT_COMPLETE Intent

注意:另外,使用Toast作为调试辅助工具并不是一个好主意。您应该将消息写入logcat并使用它来确定您的Service是否已开始等等。Toast作为调试工具不可靠。

答案 1 :(得分:0)

  

BroadcastReceiver班级

中添加此内容
public void onReceive(Context context, Intent intent) {
   if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Intent pushIntent = new Intent(context, SyncData.class);
        context.startService(pushIntent);
        Log.e("BroadCast Received", "ON BOOT COMPLETE");
   }
}

并删除这两行android:enabled="true" android:exported="false"