我是android的新手,我创造了这样的意图 -
<receiver android:name=".IncommigCallListener" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<receiver android:name=".OutgoingCallReciever" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
现在我创建了这样的服务 -
<service
android:name=".CallLogger"
android:exported="false"/>
班级CallLogger
public class CallLogger extends IntentService {
public CallLogger(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent arg0) {
// TODO Auto-generated method stub
System.out.println("service started");
}
}
我不想在我的应用程序中进行任何活动,我只想启动该服务,以便它可以在后台运行并接收PHONE_STATE
和NEW_OUTGOING_CALL
意图。
当我启动此应用程序时,它不会在PHONE_STATE
或NEW_OUTGOING_CALL
意图上记录任何内容。
如何在不使用任何活动的情况下在后台启动服务?
修改:
public class OutgoingCallReciever extends BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
}
}
和
public class IncommigCallListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
String incommingCallNumber = incomingNumber;
System.out.println("incomming call : " + incomingNumber);
break;
}
}
}
答案 0 :(得分:1)
您应该可以在接收器中执行此类操作。
public class OutgoingCallReciever extends BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Intent service = new Intent(context, CallLogger.class);
context.startService(service);
}
}
您需要创建一个intent并在其上调用startService()以“启动”该服务。
同样值得你应该摆脱System.out.println
使用Log.d(tag,msg)
的习惯来向logcat打印调试信息。如果要在不同的频道中打印,可以将d
切换为其他字母。
答案 1 :(得分:0)
只需在BroadcastReceiver的onReceive方法中启动服务即可。当您在AndroidManifist中注册BroadcastReceiver时,即使应用程序未运行,它也将始终监听广播(操作系统将为您运行)。 示例强>
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MyService.class);
context.startService(service);
}
}
修改强> 要在Boot完成时启动服务,您可以执行以下操作。
1)向Manifist添加权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2)使用BOOT COMPLETE操作注册广播接收器。
<receiver android:name="com.example.BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
3)在BootBroadcastReceiver.java中:
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent );
}
}
答案 2 :(得分:0)
为什么没有打印任何内容只是因为System.out.println
在Android中不起作用的问题!您认为后台流程将在哪里&#34; print
&#34;这个东西?
您需要将其更改为Log.d(tag, msg)
,然后检查您的logcat以查看输出!否则我猜您的代码可能正常运行。