Запустите сервис после завершения загрузки устройства - PullRequest
0 голосов
/ 17 января 2012

Я делаю приложение, в котором я хочу позвонить по номеру, когда загрузка устройства завершена.Мой код выглядит так:

 @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?Спасибо заранее

Ответы [ 3 ]

1 голос
/ 17 января 2012

Вам необходимо добавить флаг NEW_TASK перед запуском операции из службы:

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

Это объясняет:

Обратите внимание, что если этот метод вызывается извне Activity Контекст, тогда Намерение должно включать FLAG_ACTIVITY_NEW_TASK флаг запуска. Это потому, что, не будучи запущенным из существующего Активность, нет существующей задачи для размещения новой активности и, следовательно, его необходимо поставить в отдельную задачу.

Кроме того, вы должны иметь права доступа:

И, как упоминал Вакас, для вас было бы лучше начать обслуживание с вашего onReceive, например:

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

Убедитесь, что вы выполнили все, что я изложил, и если у вас по-прежнему будут возникать проблемы, будет полезно, если вы отредактируете свой вопрос и вставите логкат с принудительного закрытия.

0 голосов
/ 17 января 2012

Существует множество причин, по которым вы получаете Force Close.Лучший способ узнать, что посмотреть в журнале.Он должен точно сказать, какое исключение выдается, и дать подсказку о том, как решить проблему.

0 голосов
/ 17 января 2012

измени свой 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); 

   }
...