1

これを実行すると

String ussdCode = "*" + "100" + Uri.encode("#");
startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdCode)));

通常の通話が行われることを期待していますが、その代わりに Skype が前に出て、*100# USSD コードで電話をかけます。Skype からログアウトすると、Skype が前面に表示されます。
Skype の代わりに通常の通話を使用するように強制する方法は?

4

1 に答える 1

3

これは、Skype を通話用の既定のアプリケーションとして使用しているためです。これはデバイス構成です。変更することはできますが、変更すると実際にその構成が変更されるため、Skype がモバイルのデフォルトではなくなることに注意してください。

このフォームのアクティビティを呼び出しているデフォルトのアプリケーションをクリアできます

getPackageManager().clearPackagePreferredActivities(PACKAGENAME);

skypeのパッケージ名はcom.skype.raiderなので、あなたの場合はこれを呼び出します

getPackageManager().clearPackagePreferredActivities("com.skype.raider");

もちろん、startActivity を呼び出す前に呼び出します

アップデート

デフォルト設定をリセットしたくない場合は、startActivity に送信するインテントを 1 つのアプリに強制的に処理させることができることを思い出しました。しかし、問題があります。アプリケーションのパッケージ名と、それを処理するアクティビティを知る必要があります。場合によっては簡単に見つけることができますが、そうでない場合もあります。デフォルトの Android ダイヤラーのこの情報をグーグルで検索し、デバイスも調べましたが、何も見つかりませんでした。とにかく、それを見つけることができれば、以下のコードを使用できます。設定を変更しないため、はるかに優れています。また、他の状況で便利になる可能性があるため、覚えておくこともできます。

Intent intent = new Intent();
intent.setComponent(new ComponentName("PACKAGE_NAME","PACKAGENAME.ACTIVITY_NAME"));
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
Uri uri = Uri.parse(url);
intent.setData(uri);
try
{
    startActivity(intent);
}
catch (Exception e)
{
   e.printStackTrace();
}
于 2013-12-06T23:33:52.863 に答える