【问题标题】:Apps refresh on launch Android应用程序在启动 Android 时刷新
【发布时间】:2017-04-28 19:11:38
【问题描述】:

我已经构建了 Android 启动器并显示了已安装应用程序的列表,并且可以在长按时删除,但在我删除和应用程序后,图标仍留在抽屉中。

关于如何在删除发生后刷新列表有什么想法吗?

谢谢

编辑 1 - 这是我的应用删除代码

 @Override
public void onGridItemLongClick(GridView g, View v, int position, long id) {
    AppModel app = (AppModel) getGridAdapter().getItem(position);
    if (app != null) {
        Uri packageURI = Uri.parse("package:"+app.getApplicationPackageName());
        Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);

        if (uninstallIntent != null) {
            startActivity(uninstallIntent);
        }
    }
}

【问题讨论】:

  • 没有代码我们应该如何回答这个问题?
  • @GabeSechan 添加了我的删除代码....抱歉
  • 所以您不是自己删除它,而是分包。在这种情况下,我会为卸载事件设置一个侦听器,并在您获得一个时刷新您的网格视图。见stackoverflow.com/questions/7470314/…
  • 我是开发新手,我没有意识到我可以在不分包的情况下自己删除它...谢谢,我会抽奖
  • 你可以,但你几乎需要成为一个系统应用程序。它需要安全权限。

标签: java android launcher


【解决方案1】:

为我的应用完成了相同的任务,

首先你需要创建extends BroadcastReceiver类并在Manifest中注册,

InstallUninstallReceiver.java

  public class InstallUninstallReceiver extends BroadcastReceiver
    {
        private static final String TAG = InstallUninstallReceiver.class.getSimpleName();

        @Override
        public void onReceive(Context context, Intent intent)
        {
           startLoaderAsyncTask();
        }
private LoaderAsyncTask mLoaderAsyncTask;
private void startLoaderAsyncTask()
    {
        if(mLoaderAsyncTask != null)
        {
            mLoaderAsyncTask.cancel(true);
            mLoaderAsyncTask = null;
        }
        if(mLoaderAsyncTask == null)
            mLoaderAsyncTask = new LoaderAsyncTask();
        mLoaderAsyncTask.execute();
    }
    }

AndriodManifest.xml

<receiver android:name=".InstallUninstallReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>

当应用安装和卸载事件发生时,上述代码将触发,届时您将调用 asyntask 并更新您的适配器列表。

LoaderAsyncTask.java

public class LoaderAsyncTask extends AsyncTask<Void, PackageInfo, Void> {
    ProgressDialog mDialog;
    private ArrayList<PackageInfo> mList = new ArrayList();
    public LoaderAsyncTask()
    {
        mDialog = ProgressDialog.show(mActivity, "Loading", "Pls wait a moment...");
        mList.clear();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try
        {
            refreshAppList();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    private void refreshAppList() {
        PackageManager pkgMgr = mActivity.getPackageManager();
        List<PackageInfo> pgs = pkgMgr.getInstalledPackages(PackageManager.GET_PERMISSIONS);
        for (int i = 0; i < pgs.size(); i++) 
        {
                    if(isCancelled())
                        break;
                    PackageInfo p = pgs.get(i);
                   mList.add(p);
        }
    }



    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        mDialog.dismiss();
      //  mGridAdapter.setData(mList);//now you will get update app list , set to your GridAdapter refresh the Launcher.
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2012-05-12
    • 2013-03-10
    • 2015-10-28
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多