Как создать сервис в Android, который не может быть убит Advanced Task Killer

1

Я создаю приложение безопасности так же, как и защищенное Mcafee.
Мое приложение прослушивает команду SMS и выполняет некоторые действия, когда команда соответствует, поэтому я создаю форму с другой службой для прослушивания SMS.

Здесь основная форма:

public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
ArrayList<String> messageList;
ArrayAdapter< String> adapter;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //untuk mendisable notification area
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.main);
    MainButtonAbout=(Button) findViewById(R.id.MainbuttonAbout);
    MainButtonHelp=(Button) findViewById(R.id.MainbuttonHelp);
    MainButtonWizard=(Button) findViewById(R.id.MainbuttonWizard);
    MainButtonOption=(Button) findViewById(R.id.MainbuttonOption);
    MainCheckBoxActive=(CheckBox)findViewById(R.id.MaincheckBoxActive);

    MainButtonAbout.setOnClickListener(this);
    MainButtonHelp.setOnClickListener(this);
    MainButtonWizard.setOnClickListener(this);
    MainButtonOption.setOnClickListener(this);

    startService(new Intent(MainForm.this, ListenSMSservice.class));

    MainCheckBoxActive.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            if (buttonView.isChecked())
            {
                Toast.makeText(MainForm.this, "Your Device is Protected Now!!", 1).show();              
                startService(new Intent(MainForm.this, ListenSMSservice.class));
            }
            else
            {
                Toast.makeText(MainForm.this, "Your Device is not Protected Now!!", 1).show();
                stopService(new Intent(MainForm.this, ListenSMSservice.class));
            }
        }
    });

}

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.MainbuttonAbout:
        Intent GoToAbout= new Intent(this,AboutForm.class);
        startActivity(GoToAbout);
        break;
    case R.id.MainbuttonHelp:
        Intent GoToHelp= new Intent(this,HelpForm.class);
        startActivity(GoToHelp);
        break;
    case R.id.MainbuttonWizard:
        Intent GoToWizard1= new Intent(this,WizardForm1.class);
        startActivity(GoToWizard1);
        break;
    case R.id.MainbuttonOption:
        Intent GoToOption= new Intent(this,OptionForm.class);
        startActivity(GoToOption);
        break;  
    default:
        break;
    }
}

и это форма обслуживания:

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();

}

/*@Override
public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    ListenSMS();
}*/

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    ListenSMS();
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

private void ListenSMS() {
    // TODO Auto-generated method stub
    messageList  = new ArrayList<String>();
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, messageList);

    //Toast.makeText(this, "Masuk bagian sini sudah", 1).show();

    IntentFilter filter = new IntentFilter(SMS_RECEIVED);
    registerReceiver(receiver_SMS, filter);
}

BroadcastReceiver receiver_SMS = new BroadcastReceiver()
{
    public void onReceive(Context context, Intent intent)
    {
         if (intent.getAction().equals(SMS_RECEIVED))
         {
                Bundle bundle = intent.getExtras();
                if (bundle != null)
                {
                  Object[] pdus = (Object[]) bundle.get("pdus");
                  SmsMessage[] messages = new SmsMessage[pdus.length];

                  for (int i = 0; i < pdus.length; i++)
                    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

                  for (SmsMessage message : messages)
                  {
                         Toast.makeText(ListenSMSservice.this, "isi pesan >> "+message.getDisplayMessageBody(), Toast.LENGTH_LONG).show();
                         receivedMessage(message.getDisplayOriginatingAddress());
                         if (message.getDisplayMessageBody().toString().equalsIgnoreCase("aaaa"))
                         {
                             Toast.makeText(ListenSMSservice.this, "messegenya aaaa", 1).show();
                         }
                  }
                }
              }
    }
};
private void receivedMessage(String message)
{
    messageList.add(message);
    adapter.notifyDataSetChanged();
}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
}

К сожалению, моя служба может быть остановлена расширенным убийцей задачи, поэтому я не могу слушать команду SMS.

Я использую параметр start_sticky, но для меня это не работает.
Кто-нибудь есть идея, как справиться с этой проблемой, поэтому я могу слушать SMS (автозапуск), даже когда убийца задачи использовался, чтобы убить мое приложение?

  • 6
    Если пользователь принудительно останавливает ваше приложение с помощью стороннего инструмента или меню настроек, то он хочет, чтобы оно было остановлено.
  • 0
    да, конечно .. но я делаю приложение безопасности. мое приложение должно работать, если устройство было украдено или потеряно. Мое приложение может заблокировать устройство Android, чтобы вор не мог получить доступ к телефону. если мой сервис может быть остановлен, как предотвратить потерю телефона за доступ вора? любое решение ?? Спасибо..
Показать ещё 2 комментария
Теги:
android-ndk
android-manifest
android-widget

2 ответа

10
Лучший ответ

у кого есть идея, как справиться с этой проблемой, поэтому я могу слушать SMS (авто-сервис), а убийца задач убил мое приложение

Если пользователь принудительно останавливает ваше приложение через "Настройки" или "Убийца задач", пользователь говорит, что ваше приложение не должно запускаться. Пожалуйста, соблюдайте и уважайте это решение.

Начиная с Android 3.1, ваше приложение не будет запускаться снова после принудительного прекращения, пока пользователь не запустит его снова из активности.

  • 0
    «Если пользователь принудительно останавливает ваше приложение с помощью настроек или убийцы задач, пользователь говорит, что ваше приложение не должно запускаться. Пожалуйста, соблюдайте и уважайте это решение». >> Я делаю приложение безопасности, которое может заблокировать телефон Android, когда он потерян или украден, так что вор не может получить доступ к этому телефону ... если мое приложение может быть остановлено, то как я могу защитить телефон Android ?? любое решение?
  • 0
    @CommonsWare, не могли бы вы добавить ссылки ссылки с сайта Android о: «Начиная с Android 3.1, ваше приложение не будет работать снова после принудительной остановки, пока пользователь не запустит его снова из действия»
Показать ещё 1 комментарий
4

Зарегистрируйте <reciver> в манифесте, и он запустит ваше приложение, когда вы получите SMS

<receiver android:name=".YourBroadCastReciver" android:enabled="true">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver>
  • 4
    Это не поможет проблеме ОП, начиная с Android 3.1. Приложение с принудительной остановкой не будет отвечать на широковещательные рассылки, пока пользователь не запустит действие.
  • 0
    @CommonsWare после того, как активность впервые запущена, трансляции будут приниматься нормально?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню