【问题标题】:Android : Can I use this intent from a 3rd party application?Android:我可以从 3rd 方应用程序中使用此意图吗?
【发布时间】:2011-05-19 04:14:17
【问题描述】:

我正在使用意图通过 Twitter 客户端发布消息。 当手机上没有 Twitter 应用程序时,我想将用户重定向到市场。 但是异常 ActivityNotFoundException 不起作用。每次(当我没有 Twitter 应用程序时)我都会收到错误消息“没有应用程序可以执行此操作”

Intent intentTwitter = new Intent(Intent.ACTION_SEND);
intentTwitter.putExtra(Intent.EXTRA_TEXT,msg);
intentTwitter.setType("application/twitter");

try{
 startActivity(Intent.createChooser(intentTwitter,"tweet"));
}catch(ActivityNotFoundException e){
 // lead to the app market
}

我读到 ActivityNotFoundException 是 startActivity 及其子项的异常处理程序。也许解决方案不在异常处理中。

【问题讨论】:

    标签: android twitter exception-handling android-intent


    【解决方案1】:

    这里是发布的解决方案。

    我使用 PackageManager 和 queryIntentActivities() 来指示指定的操作是否可以用作意图。 该方法向包管理器查询手机上已安装的包,这些包可以用指定的操作响应意图。如果没有找到包,该方法返回false。

    public static boolean isIntentAvailable(Context context, String action) {
            final PackageManager packageManager = context.getPackageManager();
            final Intent intent = new Intent(action);
            List<ResolveInfo> list =
                    packageManager.queryIntentActivities(intent,
                            PackageManager.MATCH_DEFAULT_ONLY);
            return list.size() > 0;
        }
    

    这是完整的代码。我使用 Twitter 客户端连接到 Twitter。所以我正在使用

    public void ConnectTwitter(){
        String msg = getResources().getString(R.string.partager_twitter).toString();
        Intent intentTwitter = new Intent(Intent.ACTION_SEND);
        intentTwitter.putExtra(Intent.EXTRA_TEXT,msg);
        intentTwitter.setType("application/twitter");
        if (isIntentAvailable(this,"application/twitter")){
            startActivity(Intent.createChooser(intentTwitter,getResources().getString(R.string.partager_sel_tweet)));
        }
        else{
            /* Handle Exception if no suitable apps installed */  
            Log.d("twitter", "Catch exception");
            new AlertDialog.Builder(PartagerActivity.this)  
           .setTitle(getResources().getString(R.string.partager_sel_tweet))  
           .setMessage(getResources().getString(R.string.partager_app_download))
           .setNegativeButton("Non", null)  
           .setPositiveButton("Oui", new DialogInterface.OnClickListener() {  
                         public void onClick(DialogInterface dialog, int whichButton) {  
                            intentMarket("market://search?q=twitter");  
                         }  
                     })  
           .show();     
        }
    
    }
    

    使用 intentMarket 方法。只需输入 url ="market://search?q=twitter" 顺便说一句,模拟器中没有安装市场。

    public void intentMarket (String url){
        Intent i = new Intent(Intent.ACTION_VIEW);
        Uri u = Uri.parse(url);
        i.setData(u);
        try{
            startActivity(i);
        }
        catch(ActivityNotFoundException e){
            Toast.makeText(this, "Pas d'applications twitter trouvé.", Toast.LENGTH_SHORT).show();  
        }
    }
    

    更多关于 PackageManager http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html

    如果觉得有用,请点赞!

    【讨论】:

      【解决方案2】:

      我建议使用PackageManagerqueryIntentActivities() 来确定是否有东西可以处理您的startActivity() 请求。

      【讨论】:

      • 感谢 CommonsWare。我会买你的书。
      猜你喜欢
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2023-03-28
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多