2017-06-19 43 views
1

我有應用程序列表。當用戶移除任何應用程序時,我想要刷新應用程序列表 最好的辦法是做什麼?我使用Broadcast Receiver搜索並找到解決方案,是最好的方法嗎?還是有直接的方式來做到這一點?我可以捕獲Action Remove intent的結果嗎?如何捕獲android應用程序包中的remove?

回答

1

首先,你應該添加監聽像下面這種情況下,如果僅僅只在刪除感興趣只想補充一點,只是,

<receiver 
     android:name=".receiver.AppStateReceiver" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter android:priority="999"> 
      <action android:name="android.intent.action.PACKAGE_ADDED" /> 
      <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
      <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
      <action android:name="android.intent.action.QUERY_PACKAGE_RESTART" /> 

      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 

那麼你可以添加廣播接收機這樣,

public class AppStateReceiver extends BroadcastReceiver { 

    public AppStateReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     String packageName = intent.getData().getEncodedSchemeSpecificPart(); 

     // Check if the application is install or uninstall and display the message accordingly 
     if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) { 



     } else if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) { 
      intent.setAction(intent.getAction()); 

      Intent uninstallIntent = new Intent(); 

      uninstallIntent.setAction("Uninstall"); 
      uninstallIntent.putExtra("packageName", packageName); 

      LocalBroadcastManager.getInstance(context).sendBroadcast(uninstallIntent); 

     } else if (intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")) { 
      // Application Replaced 
//   toastMessage = "PACKAGE_REPLACED: " + intent.getData().toString() + getApplicationName(context, intent.getData().toString(), PackageManager.GET_UNINSTALLED_PACKAGES); 
     } else if (intent.getAction().equals("android.intent.action.QUERY_PACKAGE_RESTART")) { 

     } 
    } 
} 

當您在接收器中接到回撥時,只需發送一個本地廣播,您就可以聽取您的活動或片段或服務並根據該處理進行處理。

本地廣播聽衆在你的片段,

BroadcastReceiver UninstallReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     updateItems(); 
    } 
}; 

註冊和取消註冊廣播

LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(UninstallReceiver); 
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(UninstallReceiver, new IntentFilter("Uninstall")); 
+0

此代碼需要的權限? –

+0

我們不需要此接收器的許可。 –

+0

我必須註冊廣播嗎?創造活動還是? –

相關問題