⑴ android开发 service 和activity 广播问题
这里我们先假定service发出内容时候的Action为ActionS。
如果activity里没有动态注册监听service发出的ActionS的广播, 即使Activity当前在使用中也不会得到通知, 更不用说未启动的Activity来捕获这个通知了。
要捕获这个字符串有两种方式, 分别如下
在AndroidManifest.xml中注册
<receiver android:name="YourBroadcastReceiver" >
<intent-filter>
<action android:name="ActionS" />
</intent-filter>
</receiver>
这样, 一旦有定义的ActionS发出来,YourBroadcastReceiver的onReceive方法就会回调了,这样的监听,不需要你的app已经在运行。你在onReceive方法里拦截处理。
2.在Activity中动态创建监听器, onCreate()中生成一个IntentFilter对象
IntentFilter filter=new IntentFilter();
//为IntentFilter添加一个ActionS
filter.addAction(ActionS);
yourBroadcastReceiver = newYourBroadcastReceiver();
registerReceiver(yourBroadcastReceiver, filter);
在onDestroy的时候去注册
unregisterReceiver(yourBroadcastReceiver);
这样的方式只有在Activity生命周期onCreate()-onDestroy()之间有效, 在YourBroadcastReceiver.onReceive()方法里拦截处理。
⑵ Android开发怎么调试Service
Android开发如何调试Service
Android 开发中,添加代码对Service 进行调试 。
介绍
以调试 模式启动Android 项目时,在service 中设置断点,调试 器不会停止下来
解决方法
所有的这种情况下,都是在代码中声明。调用的方法是:
android.os.Debug.waitForDebugger();
举个例子,SoftKeyboard:
public class SoftKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener { @Override public void onConfigurationChanged(Configuration newConfig) { Log.d("SoftKeyboard", "onConfigurationChanged()"); /* now let's wait until the debugger attaches */ android.os.Debug.waitForDebugger(); super.onConfigurationChanged(newConfig); /* do something useful... */ }
代码中你可以看到,首先是调用了日志记录器logger,代码运行到这里时,会将在logcat中添加一条记录,这是跟踪代码运行的一种方法,如果不需要在断点上停止时可以使用。但通常为了更详细的调试 ,这是不足够的。
第二条语句等待添加调试 器,添加了这条语句之后,可以在这个方法的任何地方添加断点。
Activity也是应用的部分时调试 Service 就更加容易了。那种情况下,首先需要启动Activity,调试 器也可以在Service 的断点中停止下来,不需要调用 waitForDebugger()。
⑶ 怎么开发android service 开机启动
第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BootBroadcastReceiver extends BroadcastReceiver {
//重写onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
//后边的XXX.class就是要启动的服务
Intent service = new Intent(context,XXXclass);
context.startService(service);
Log.v("TAG", "开机自动服务自动启动.....");
//启动应用,参数为需要自动启动的应用的包名
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
context.startActivity(intent );
}
}
第二步:配置xml文件,在receiver接收这种添加intent-filter配置
<receiver android:name="BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
第三步:添加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />