【问题标题】:ActivityNotFoundException handlingActivityNotFoundException 处理
【发布时间】:2013-06-18 14:41:23
【问题描述】:

我已经有几年没有做过异常处理了,而且我似乎无法弄清楚我做错了什么。我有一个应用程序可以打开我的另一个应用程序,如果用户还没有另一个应用程序,我希望当前的应用程序重定向到 Play 商店。现在,如果未安装该应用程序,该程序将强制关闭。我当前的代码是:

try{
    Intent intent = new Intent();
    PackageManager manager = getPackageManager();
    intent = manager.getLaunchIntentForPackage("my.app.package");
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    startActivity(intent);
   }
catch(ActivityNotFoundException activityNotFound){
    Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, 
    Uri.parse("market://details?id=my.app.package"));
    startActivity(playStoreIntent);
   }

我有一种感觉,我在做一些非常愚蠢的事情并且滥用了catch 函数。任何帮助将非常感激。

【问题讨论】:

  • 你能发布你的 logcat 异常吗?
  • 删除intent.addCategory(Intent.CATEGORY_LAUNCHER);后试试
  • getLaunchIntentForPackage() 如果“my.app.package”不存在则返回 null,因此您将收到 NullPointerException 用于在为 null 的意图上调用 addCategory(...)。跨度>

标签: android android-intent exception-handling


【解决方案1】:

试试这个代码。评论中给出的解释

String packageName = "my.app.package";
try{
        Intent intent = new Intent();
        PackageManager manager = getPackageManager();
        intent = manager.getLaunchIntentForPackage(packageName);
        //if application not installed, intent to get launcher will be null
        if(intent != null) {
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            startActivity(intent);
        }else{
                   //launch play store with package name
            Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, 
                    Uri.parse("market://details?id=my.app.package"));
                    startActivity(playStoreIntent); 
        }
       }
    catch(ActivityNotFoundException activityNotFound){
        // to handle play store not installed scenario
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri
                .parse("http://play.google.com/store/apps/details?id=" + packageName));
        startActivity(intent);
}

【讨论】:

  • 我注意到有些人没有安装Play Store,导致ActivityNotFoundException。谁没有安装 Play 商店?诡异的!感谢您在浏览器中打开它的代码。
【解决方案2】:

你可以试试这个:try catch 不是必需的。

 Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(packagename);

 if(null!=LaunchIntent)
    {
       startActivity(LaunchIntent);
    }
else
    {
      //intent to open the market.
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多