设备启动完成后启动服务

时间:2012-01-17 15:24:27

标签: android service broadcastreceiver

我正在做一个应用程序,我想在设备启动完成时调用一个数字。我的代码是这样的:

 @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("**inside onRecevier");

        Intent serviceIntent = new Intent();
        serviceIntent.setAction("com.test.app.TestService");
        context.startService(serviceIntent); 

   }

首先我创建了BroadcastReceiver。我在清单文件中注册了这个接收器,如下所示:

<receiver android:name="TestReceiver">
        <intent-filter>
             <action android:name="android.intent.action.BOOT_COMPLETED" />
             <category android:name="android.intent.category.HOME" />
        </intent-filter>    
    </receiver> 

在接收器中,我调用了以下服务:

public class TestService extends Service{

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub

        System.out.println("**inside onCreate");
        super.onCreate();
        Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();
        Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:+5555")); 
        startActivity(call);
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub

        System.out.println("**inside onDestroy");
        super.onDestroy();
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        System.out.println("**inside onStart");
        super.onStart(intent, startId);
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    }

}

当我在启动应用程序后尝试启动设备时强行关闭。在android中怎么做? Thanx提前

3 个答案:

答案 0 :(得分:1)

您需要在从服务开始活动之前添加NEW_TASK标志:

Intent call = new Intent(Intent.ACTION_CALL,Uri.parse("tel:+5555"));
call.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(call);

This解释说:

  

请注意,如果从Activity外部调用此方法   然后,Intent必须包含FLAG_ACTIVITY_NEW_TASK   发射旗帜。这是因为,没有从现有的开始   活动,没有现有任务可以放置新活动   因此需要将它放在自己独立的任务中。

此外,您必须拥有权限:

正如Waqas所说,你最好从onReceive开始提供服务:

 Intent serviceIntent = new Intent(context, TestService.class);
 context.startService(serviceIntent); 

确保你已经完成了我所说的一切,如果你继续遇到问题,那么如果你编辑你的问题并从强制关闭中粘贴logcat会很有帮助。

答案 1 :(得分:0)

将onReceive更改为此

@Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("**inside onRecevier");

        Intent serviceIntent = new Intent(context, TestService.class);
        context.startService(serviceIntent); 

   }

答案 2 :(得分:0)

有多种原因可以让你获得强制关闭。告诉哪个是查看日志的最佳方法。它应该告诉你究竟抛出了什么异常,并给出一个如何解决问题的提示。