Я создаю приложение безопасности точно так же, как Mcafee wave secure.
Мое приложение прослушивает команду 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 (служба автозапуска), даже если убийца задач использовался для уничтожения моего приложения?