在android应用程序以编程方式安装后,如何检测用户是否单击了“完成”或“打开”

在android应用程序以编程方式安装后,如何检测用户是否单击了“完成”或“打开”,android,file,apk,Android,File,Apk,我在检测用户是否点击了对话框时遇到了问题,该对话框通常在安卓应用程序安装后弹出。这样我就可以继续进行下一次安装或活动。您无法检测到 如果您想在应用程序的第一次运行时执行一些操作,那么只需在用户首选项中存储一个“first run”标志,并将其默认为true 然后,您可以在应用程序启动时对此进行检查,并执行任何必要的操作 这方面的一些示例代码 private boolean prefFirstRun; @Override public void onCreate(Bundle savedInst

我在检测用户是否点击了对话框时遇到了问题,该对话框通常在安卓应用程序安装后弹出。这样我就可以继续进行下一次安装或活动。

您无法检测到

如果您想在应用程序的第一次运行时执行一些操作,那么只需在用户首选项中存储一个“first run”标志,并将其默认为true

然后,您可以在应用程序启动时对此进行检查,并执行任何必要的操作

这方面的一些示例代码

private boolean prefFirstRun;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    settings = PreferenceManager.getDefaultSharedPreferences(this);

    prefFirstRun= settings.getBoolean("FirstRun", true);
}

@Override
protected void onStart() {
    super.onStart();

    if (prefFirstRun) {
        prefFirstRun = false;
        // Do your initial operations here
    }
}

@Override
protected void onStop() {
    super.onStop();

    SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = settings.edit();
    editor.putBoolean("FirstRun", false);
    editor.commit();

}

如果我没弄错的话

  • 您正在尝试以编程方式安装APK
  • 成功安装后,您需要获取状态,无论用户按下按钮
    Open
    还是
    Done
这是可以做到的。为此,请像这样启动软件包安装程序

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
Uri.fromFile(new File("Full path to your APK")),
        "application/vnd.android.package-archive"); // the APK path can be in SDCARD or in your application directory. I am sure you know this path.

// start the package-installer activity and wait for result. The second parameter can be used to identify the source of result in `onActivityResult` method. 
startActivityForResult(intent, 1);
  • 现在软件包安装程序将启动,您的APK将安装到设备上
  • 用户按下
    Open
    Done
    按钮
  • 您可以在
    onActivityResult
    回调函数中返回程序控件
下面是onActivityResult的
函数:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // requestCode == 1 means the result for package-installer activity
    if (requestCode == 1) 
    {
        // resultCode == RESULT_CANCELED means user pressed `Done` button
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "User pressed 'Done' button", Toast.LENGTH_SHORT).show();
        } 
        else if (resultCode == RESULT_OK) {
            // resultCode == RESULT_OK means user pressed `Open` button
            Toast.makeText(this, "User pressed 'Open' button", Toast.LENGTH_SHORT).show();
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

什么意思?我们这里说的是什么对话框?一个通知用户应用程序已安装的对话框,底部有两个按钮,“打开”和“完成”。我需要知道是否有一个按钮被点击了。你想怎么做才能不抓拍呢?它不属于您的进程…是的,这两个按钮中的任何一个,因为在安装第一个应用程序后,我必须安装剩余的apk文件。或者甚至如何至少隐藏它们。哦!我会试试这个,因为我也一直在想onActivityResult函数中的resultCode是什么。如果行得通,我会再打给你。谢谢我尝试了你的代码,但仍然不起作用,我相信它在安装应用程序之前的确认对话框中起作用,其中它要求你安装或不安装应用程序。但安装后不会。我是否应该在startActivityForResult()函数之后添加setresult(RESULT_OK)?您能否详细说明我将在何处继续第二个活动或第二次安装?在本例中,我已将第一次运行的检查放在onStart方法上,但您可以在应用程序中的任何位置执行此检查。要获得所需的结果,我把你的答案和上面的答案结合起来。我了解到,当活动完成时,会再次调用oncreate()函数,因此onActivityResult()函数无法正常工作。我尝试让onCreate()函数执行一次,然后继续在onActivityResult()函数中安装其余的apk