如何检查启动接收器是否正常工作?

时间:2015-04-15 12:39:06

标签: android broadcastreceiver boot

我创建了一个启动接收器类:

public class BootReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
         Log.d("Boot receiver","Working")
    }
}

我的清单文件:

 <receiver android:name="com.voonik.android.receivers.BootReceiver">
       <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
       </intent-filter>
 </receiver>

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

我使用了adb命令 - am broadcast -a android.intent.action.BOOT_COMPLETED

我仍然无法确定它是否正常工作。我该如何测试?

2 个答案:

答案 0 :(得分:0)

我认为你在接收时错过了@Override。

@Override
public void onReceive(Context context, Intent intent) {
 Log.d("Boot receiver","Working")
}

在我的清单中我有;

 <receiver
    android:name=".BootUpReceiver"
    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>

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

在BootUpReceiver.java中我有;

public class BootUpReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        Intent i = new Intent(context, Main.class);  
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);  
    }    
}

您应该只能看到登录logcat,尝试使用System.out.println("BOOT RECEIVED"); 而不是Log

答案 1 :(得分:0)

请记住,软件包具有不同的状态(主要更改来自Android 3.1)。
如果用户没有自己打开应用程序(至少一次),那么您的程序包将无法获得此意图。

否则,在没有用户交互的情况下运行一些恶意代码将非常容易。

出于安全考虑,您可以想象。 在那里,您可以找到更多信息:Trying to start a service on boot on Android

除非您将APK放在/system/apps文件夹中,否则将使用系统证书对其进行签名。

P.S。:你可以通过意图传递一些旗帜,对你来说可能很有意思FLAG_INCLUDE_STOPPED_PACKAGES