2011-07-27 8 views
1

私は、マカフィーウェイブセキュアと同じようにセキュリティアプリケーションを作成します。
私のアプリケーションは、SMSコマンドをリッスンし、コマンドが一致したときに何らかのアクションを実行しているので、SMSを聞くための別のサービスでフォームを作成します。アドバンストタスクキラーで殺すことのできないAndroidでのサービスの作成方法

ここでは、メインフォームです:

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はユーザーをマルウェアから守ります。つまり、ユーザーを「セキュリティサービス」から守ります。 OSの一部である(またはその可能性がある)紛失/盗難/奪取された電話(例えば、ディスク全体の暗号化)からユーザを守るためのより良い解決策がある。 – CommonsWare

答えて

10

あなたのアプリを起動します)タスクキラーが私のアプリケーションを殺している間

ユーザーが設定やタスクキラーを介してアプリケーションを強制停止した場合、ユーザーはあなたのアプリケーションが実行されないと言っています。その決定を尊重し、尊重してください。

Android 3.1では、アプリケーションが強制停止された後、ユーザーがアクティビティから再度起動するまで、アプリケーションは再度実行されません。

+0

** "設定やタスクキラーを使用してアプリケーションを強制停止した場合、ユーザーはあなたのアプリが実行されないと言っています。アンドロイド携帯電話を紛失したり盗まれたりするとロックすることができるので、泥棒はその電話にアクセスできません。任意のソリューションですか? –

+0

@CommonsWareは、アンドロイドサイトからのリンク参照を追加できます: "Android 3.1では、強制終了した後、ユーザーがアクティビティから再度起動するまで、アプリケーションは再び実行されません" – NguyenDat

+0

http://commonsware.com /blog/2011/07/13/boot-completed-regression-confirmed.html – CommonsWare

4

(自動サービスを開始したマニフェストで<reciver>を登録し、あなたがSMSを受信したとき、それは誰もがその問題を処理するために、どのようにアイデアを持っているので、私は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以降のOPの問題には役立ちません。ユーザーがアクティビティを開始するまで、強制停止されたアプリケーションはブロードキャストに応答しません。 – CommonsWare

+0

@CommonsWareの活動が最初に開始された後、放送は正常に受信されますか? – opc0de

+0

@ opc0de:ユーザーが設定に入り、アプリの「強制停止」をクリックしない限り、はい。その後、アプリが最初にインストールされたときと同じ状態に戻ります。 – CommonsWare

関連する問題