我正在使用意图通过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及其子进程的异常处理程序。也许解决方案不在异常处理中。
答案 0 :(得分:4)
以下是发布的解决方案。
我使用PackageManager和queryIntentActivities()来指示指定的操作是否可以用作intent。 该方法向包管理器查询电话上已安装的包,这些包可以响应具有指定操作的意图。如果未找到任何包,则该方法返回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
如果您觉得这很有用,请竖起大拇指!
答案 1 :(得分:1)
我建议您使用PackageManager
和queryIntentActivities()
来确定是否有某些内容可以处理您的startActivity()
请求。