2012-04-20 6 views
3

私のアプリがアンドロイド携帯にインストールされるときに、そんなことをしたい。本体から電話からアンインストールすることはできません。また、誰かがアンインストールを試みると、ポップアップショーまたはアラートが表示されます。 方法はありますか?アンドロイドでアプリケーションのunistallを無効にしますか?

+2

あなたの携帯電話からあなたのアプリをアンインストールできないようにしたいですか?恐ろしい... –

+0

デバイス管理者を作る方法はありますか。 ユーザーがアンドロイドでアプリケーションをインストールすると、他のユーザーはそのアプリをそのデバイスから削除できません。 –

+1

私は会社を所有していて、私のスタッフが自分のために構築したアプリを使用したいと思っていたのですが、アンインストールした方がいいと思いますそれ。駐車券の人、営業スタッフ、配達スタッフを考えてください。私はハードウェアを所有しており、あなたはそれを使用すると言います。 – baash05

答えて

0

私が現在あなたがこれを達成できると思う唯一の方法は、2つのアプリケーションです。

  1. は、サービスとして動作し、アプリが
    であるかどうかをチェックし、見つからない場合はインストールします。
  2. はよく私がBlessenmが言ったように、...他の方法を考えるOSを変更することができます..あなたは、あなたのユーザーが

[OK]を見てみたいアプリです..しかし、それはあなたが、ハードウェアの特定のビットをターゲットにしている想定します。

あなたはシステムをルートすることができるかもしれません。そうすれば管理者のアイデアへのアクセス権が得られるかもしれません。

1

理論的には、電話機を「ルート」し、システムパーティションにアプリケーションを追加して(ユーザーはシステムパーティションを変更できません)、電話機を再度アンインストールします。私はこれがすべてのモデルではうまくいくかどうかはわかりません。一部のデバイスは「根絶」できません。

+0

あなたは電話を根っこにする方法を説明できますか?すべてのアンドロイドメーカーが許可していますか?製造元がこの機能を提供しているかどうかわからない場合 –

+1

電話機の起動は、各デバイスの製造元にとって非常に特殊な手順です。私は、すべての異なる作り方をカバーするチュートリアルはないと思う。私は恐れている具体的な指示のためにgoogleする必要があります。ソニー・エリクソン(ソニー・モバイル・ア・デイ・デイ)は、彼ら自身の開発者フォーラムで非常に有益なコミュニティを持っています。 – dbm

+0

ありがとうMr.dbm :)ありがとうございました。 –

7

Force StopUninstall機能を無効にするには、deviceAdminを有効にする必要があります。これは、企業/アプリポリシー管理を処理するDevice Admin APIによって処理されます。

+0

これを行う方法? –

+0

この機能を使用するには、Device Admin APIのサンプルコードを共有してください。 –

2

明示的に無効にすることは不可能です。ただし、これには回避策を使用できます。

//MasterService.java 
public class MasterService extends Service{ 

    private ThreadPoolExecutor executor; 
    private Runnable runnable = new Runnable(){ 
     @Override 
     public void run(){} 
    }; 

    public MasterService(){ 
     executor = new ThreadPoolExecutor(1, 1, 1, TimeUnit.SECONDS, 
         new LinkedBlockingQueue<Runnable>()); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     executor.execute(runnable); 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     executor.shutdown(); 
    } 

}; 

startService(new Intent(this, MasterService.class));でそれを起動し、エクスポートし、有効としてマニフェストにそれを宣言することを忘れないでください: 背景に永続的に実行されますあなたのアプリでサービスを作成します。

Androidはアプリをアンインストールするためにパッケージマネージャを実行する(ルート以外の携帯端末に)。 Runnableでは、パッケージマネージャがフォアグラウンドで実行されているかどうかを検出する必要があります。はい、ビュー使用して入力フォーカスを取る活動を開始した場合:あなたの活動で

//MasterService.java (inside runnable) 
@Override 
public void run(){ 
    while(true) { 
     ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
     List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); 

     for (int i = 0; i < procInfos.size(); i++) { 
      //check if package installer runs in foreground 
      if (procInfos.get(i).processName.equals("com.android.packageinstaller") && procInfos.get(i).importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 

       //start activity 
       startActivity(new Intent(MasterService.this, OverlayActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY)); 
      } 
     } 
    } 
} 

を、任意のビューを作成し、パッケージのアンインストーラの画面に戻ることからユーザーを防ぐために、戻るボタンをオーバーライドします。

//OverlayActivity.java 
public class OverlayActivity extends Activity{ 

    private ImageView view; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     view = new ImageView(this); 
     setContentView(view); 
    } 


    @Override 
    public void onBackPressed() { 

    } 
}; 

ホームボタンはすべてのアクティビティを非表示にするため重要ではなく、ユーザがパッケージマネージャを選択するためにタスクボタンを押した場合、OverlayActivityが再び開きます。 マスターサービスを停止または強制終了できないことを確認します。

  1. onDestroyファンクションに、サービスを再度起動するカスタムブロードキャストメッセージを送信します。
  2. com.android.settingsをチェックして設定アプリも無効にします。

あなたは、ユーザーがアプリをいつアンインストールするかを知っておく必要があることをご存じでしょうか。

関連する問題