2015-06-15 23 views
0

Я разрабатываю приложение, в котором хранится информация о вызовах и сообщениях. Я не хочу, чтобы пользователь удалял приложение без ввода пароля. Я хочу, чтобы пользователь не делал этого. Я смотрел на эти ссылки тоже, но я не мог получить подсказку: Ask for password before uninstalling applicationспрашивать пароль при удалении приложения для Android?

вот что я писал:

Android Manifest

<receiver android:name=".DetectRemoved" > 
       <intent-filter android:priority="999999"> 
        <action android:name="android.intent.action.QUERY_PACKAGE_RESTART" /> 
        <data android:scheme="package" /> 
       </intent-filter> 
      </receiver> 

Java Code

public class DetectRemoved extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String[] packageNames = intent.getStringArrayExtra("android.intent.extra.PACKAGES"); 

      if(packageNames!=null){ 
       for(String packageName: packageNames){ 
        if(packageName!=null && packageName.equals("activity_log.pargansystem.com.activity_log")){ 
         Toast.makeText(context, "your message", Toast.LENGTH_SHORT).show(); 
         // start your activity here and ask the user for the password 
        } 
       } 
      } 
     } 
    } 

ответ

1

Я не хочу, чтобы пользователь удалял приложение без ввода пароля

Это невозможно. Ваше приложение не будет уведомлено и не просят разрешения на это.

+0

спасибо, но как обнаружить, что мое приложение было удалено или удалено? – Babak

+0

Сообщение об удалении передается после удаления пакета, поэтому другие получат уведомление, так как ваш пакет уже удален в это время, поэтому «нет». См. Расширители 'PACKAGE_ *' здесь: https://developer.android.com/reference/android/content/Intent.html –

1

Как это работает

В Manifest.xml

добавить разрешение:

<uses-permission android:name="android.permission.GET_TASKS"/> 

и широковещательный приемник:

<receiver android:name=".UninstallIntentReceiver"> 
    <intent-filter android:priority="0"> 
     <action android:name="android.intent.action.QUERY_PACKAGE_RESTART" /> 
     <data android:scheme="package" /> 
    </intent-filter> 

UninstallIntentReceiver.java (трансляция класс приемника)

public class UninstallIntentReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    // fetching package names from extras 
    String[] packageNames = intent.getStringArrayExtra("android.intent.extra.PACKAGES"); 

    if(packageNames!=null){ 
     for(String packageName: packageNames){ 
      if(packageName!=null && packageName.equals("YOUR_APPLICATION_PACKAGE_NAME")){ 
       // User has selected our application under the Manage Apps settings 
       // now initiating background thread to watch for activity 
       new ListenActivities(context).start(); 

      } 
     } 
    } 
} 

} 

ListenActivities класс - для мониторинга переднего плана деятельности

class ListenActivities extends Thread{ 
boolean exit = false; 
ActivityManager am = null; 
Context context = null; 

public ListenActivities(Context con){ 
    context = con; 
    am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
} 

public void run(){ 

    Looper.prepare(); 

    while(!exit){ 

     // get the info from the currently running task 
     List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(MAX_PRIORITY); 

     String activityName = taskInfo.get(0).topActivity.getClassName(); 


     Log.d("topActivity", "CURRENT Activity ::" 
       + activityName); 

     if (activityName.equals("com.android.packageinstaller.UninstallerActivity")) { 
      // User has clicked on the Uninstall button under the Manage Apps settings 

      //do whatever pre-uninstallation task you want to perform here 
      // show dialogue or start another activity or database operations etc..etc.. 

      // context.startActivity(new Intent(context, MyPreUninstallationMsgActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 
      exit = true; 
      Toast.makeText(context, "Done with preuninstallation tasks... Exiting Now", Toast.LENGTH_SHORT).show(); 
     } else if(activityName.equals("com.android.settings.ManageApplications")) { 
      // back button was pressed and the user has been taken back to Manage Applications window 
         // we should close the activity monitoring now 
      exit=true; 
     } 
    } 
    Looper.loop(); 
} 
} 

Это код, как я нашел в некоторой связи Надеюсь, что это полезно для вас.

+0

спасибо моему другу, но нет ... – Babak

+0

Почему этот код вам не подходит? –

+0

Я не знаю, но не знаю, когда вы запускаете это. – Babak

Смежные вопросы