Java 如何在Android中创建一个不能被高级任务杀手杀死的服务

Java 如何在Android中创建一个不能被高级任务杀手杀死的服务,java,android,android-widget,android-ndk,android-manifest,Java,Android,Android Widget,Android Ndk,Android Manifest,我创建了一个安全应用程序,就像Mcafee wave secure一样。 我的应用程序正在侦听SMS命令,并在命令匹配时执行一些操作,因此我使用另一个服务创建了一个表单来侦听SMS 主要形式如下: public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; ArrayList<String> messageList; ArrayAdapter< String> a

我创建了一个安全应用程序,就像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选项,但它对我不起作用。 有没有人知道如何处理这个问题,这样即使使用task killer杀死我的应用程序,我也可以收听SMS自动启动服务?

在清单中注册一个,当你收到SMS时,它将启动你的应用程序

<receiver android:name=".YourBroadCastReciver" android:enabled="true">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver>
在清单中注册,当您收到短信时,它将启动您的应用程序

<receiver android:name=".YourBroadCastReciver" android:enabled="true">
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver>
任何人都知道如何处理这个问题,这样我就可以在任务杀手杀死我的应用程序时收听短信自动启动服务

如果用户强制通过设置或任务杀手停止您的应用程序,则用户表示您的应用程序不应运行。请尊重这个决定

从Android 3.1开始,您的应用程序在被强制停止后不会再次运行,直到用户从活动中再次启动它

任何人都知道如何处理这个问题,这样我就可以在任务杀手杀死我的应用程序时收听短信自动启动服务

如果用户强制通过设置或任务杀手停止您的应用程序,则用户表示您的应用程序不应运行。请尊重这个决定


从Android 3.1开始,您的应用程序在被强制停止后不会再次运行,直到用户从活动中再次启动它。

从Android 3.1开始,这对OP的问题没有帮助。强制停止的应用程序只有在用户启动活动后才会响应广播。@Commonware在首次启动活动后,广播才会正常接收?@opc0de:是,除非用户进入“设置”并单击应用程序的“强制停止”。然后你又回到了最初安装应用程序时的状态。从Android 3.1开始,这无助于解决OP的问题。强制停止的应用程序只有在用户启动活动后才会响应广播。@Commonware在首次启动活动后,广播才会正常接收?@opc0de:是,除非用户进入“设置”并单击应用程序的“强制停止”。然后,您将恢复到与第一次安装应用程序时相同的状态。如果用户通过第三方工具或“设置”菜单强制停止您的应用程序,则他们希望该应用程序停止。当然可以。。但是我做了一个安全应用程序。如果设备被盗或丢失,我的应用程序应该可以工作。我的应用程序可以锁定android设备,这样小偷就无法访问手机。如果我的服务可以停止,如何防止丢失的手机被窃贼访问??有什么解决办法吗??谢谢你说你在做保安服务。您正在创建恶意软件,因为恶意软件可能具有您描述的功能。Android保护用户免受恶意软件的侵害,这意味着它保护用户免受您的安全服务的侵害。有更好的解决方案可以保护用户免受丢失/被盗/扣押的手机的侵害,例如,全磁盘加密,它是或可能是操作系统的一部分。这是我的最后一个项目。我创建了一个像mcafee wave secure这样的应用程序。。如果你说我正在创建一个恶意软件,那么mcafee wave secure呢?如果用户通过第三方工具或“设置”菜单强制停止你的应用程序,那么他们希望它停止。当然可以。。但是我做了一个安全应用程序。如果设备被盗或丢失,我的应用程序应该可以工作。我的应用程序可以锁定android设备,这样小偷就无法访问手机。如果我的服务可以停止,如何防止丢失的手机被窃贼访问??有什么解决办法吗??谢谢你说你在做保安服务。您正在创建恶意软件,因为恶意软件可能具有您描述的功能。Android保护用户免受恶意软件的侵害,这意味着它保护用户免受您的安全服务的侵害。有更好的解决方案可以保护用户免受丢失/被盗/扣押的手机的侵害,例如,全磁盘加密,它是或可能是操作系统的一部分。这是我的最后一个项目。我创建了一个像mcafee wave secure这样的应用程序。。如果你说我正在创建一个恶意软件,那么mcafee wave secure呢?如果用户强制通过设置或任务杀手停止你的应用程序,那么用户说你的应用程序不应该运行。请尊重这一决定。>>我制作了一个安全应用程序,可以在android手机丢失或被盗时锁定它,这样小偷就无法访问该手机。。如果我的应用程序可以停止,那么我如何保护android手机??有什么解决方案吗?@commonware您能添加以下链接引用吗
m android站点关于:从android 3.1开始,您的应用程序在强制停止后不会再次运行,直到用户从活动中再次启动。如果用户强制通过设置或任务杀手停止您的应用程序,则用户表示您的应用程序不应运行。请尊重这一决定。>>我制作了一个安全应用程序,可以在android手机丢失或被盗时锁定它,这样小偷就无法访问该手机。。如果我的应用程序可以停止,那么我如何保护android手机??有什么解决方案吗?@commonware您可以添加android站点的链接引用吗?关于:从android 3.1开始,您的应用程序在被强制停止后不会再次运行,直到用户从活动中再次启动它