【问题标题】:Get intent of uninstall app in android在android中获取卸载应用程序的意图
【发布时间】:2011-10-10 04:05:29
【问题描述】:

我只是想知道卸载应用程序的意图,因为

在我的应用程序中,当用户打开第一个屏幕时,设备 ID 将使用 php 保存在服务器端。

当用户卸载此应用程序时,设备将自动在服务器端删除。

为此,我准备了用于删除设备 ID 的 php 代码。那么我什么时候可以调用这个 webservive。

我试过下面的代码

public class MyReceiver extends BroadcastReceiver {

@Override
 public void onReceive(Context context, Intent intent) {
 String action = intent.getAction(); 
 if("android.intent.action.PACKAGE_REMOVED".equals(action)){
   // here i wrote the code of  delete device id in server side
}

但它不起作用,因为没有提出意图。所以请告诉我当用户卸载应用程序时会提出什么意图或告诉我任何解决我的问题的建议。

提前致谢。

问候

【问题讨论】:

标签: android uninstallation


【解决方案1】:

您无法获得自己应用的卸载意图。有关更多信息,请参阅此线程 - Get application uninstall event in android

【讨论】:

    【解决方案2】:
    <receiver android:name=".MyReceiver">
    <intent-filter android:priority="999"> 
        <action android:name="android.intent.action.PACKAGE_REMOVED"/>
        <data android:scheme="package"/> 
    </intent-filter>
    </receiver>
    

    在 Android 4.0 中测试并且运行良好

    【讨论】:

    • 这不会被我的应用程序接收,而是被其他人接收
    【解决方案3】:

    您可以使用无障碍服务检测任何应用(包括您自己的应用)的卸载弹出窗口。

    public class MyService extends AccessibilityService {
    
    @Override
    public void onCreate() {
        super.onCreate();
    }
    
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
    
        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
    
            if(event.getText().equalsIgnoreCase("check for content in popup which is in screenshot"){
    
            /**Do your task*/
            }
        }
    }
    
    @Override
    public void onInterrupt() {
    }
    
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.flags = AccessibilityServiceInfo.DEFAULT;
        info.packageNames = new String[]{"com.android.packageinstaller"};
        info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED | AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        setServiceInfo(info);
    }
    

    这里onServiceConnected[![com.android.packageinstaller][1]][1]代表安装/卸载应用包名(这是系统应用,没有任何UI,所以不会显示给用户)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 2011-12-13
      • 2015-05-01
      • 2012-03-24
      • 2012-12-12
      • 2012-04-13
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多