2011-10-24 5 views
33

のために、私はアプリを開発していますし、マニフェストに私が持っている:android.permission.CALL_PHONEは、錠剤

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> 

私はこのコードを実行するボタンをクリックしてください:

Intent intentcall = new Intent(); 
intentcall.setAction(Intent.ACTION_CALL); 
intentcall.setData(Uri.parse("tel:" + phonenumber)); // set the Uri 
startActivity(intentcall); 

それが実行されます電話ではうまくいき、タブレットでは連絡先に番号を表示または追加できるディスプレイが表示されます。しかし、私がマニフェストの許可を保持していれば、市場の錠剤では利用できません。どのようにしてコードの動作を維持し、タブレットと携帯電話の市場に表示させることができますか?

答えて

6

"uses-feature"については、実際に電話をかける前に電話が利用可能であることを確認していますか?アプリがタブレット上にある場合は、その余分なステップを実行する必要があります。マニフェストであなたが言っているのは、その機能が必要ないということだけです。おそらく、あなたはそれを実際にロジックを実装することに依存しています。 Googleドキュメントから

+0

私は正しくチェックしていると思っていましたが、正しくチェックする方法を詳しく説明できますか? – mouser58907

+2

さて、私は何をしているのかチェックしなければなりませんでした。私は最初これを行っていました:boolean hasPhone = getPackageManager()。hasSystemFeature(PackageManager.FEATURE_TELEPHONY);しかし、私はこれがいくつかの携帯電話で薄れそうになるかもしれないと私は自分にメモを持っています。あなたは何を使用していますか – user655489

+0

私はcheckPermission(__、__)を使っていたと思います。私はAndroidの電話で私の手を取得して報告することができますこれを試してみましょう。 – mouser58907

3

ACTION_CALLという識別子を持つユーザーを追加する代わりに、ACTION_INSERT_OR_EDITに変更してください。

かわりCALL_PHONE許可を、あまりにもこれらの権限が必要です:あなたが必要AndroidManifestで

can't find app on market

+0

事は、私はまだ可能であればそれらを呼びたいです。しかし、タブレットはこれを考慮に入れているようで、ACTION_CALLを使用すると連絡先を表示して保存するという独自の意図があります。 – mouser58907

+1

市場は属性に基づいてアプリケーションをフィルタリングします。そのため、CALL_PHONE権限が存在する限り、このアプリを市販のタブレットで利用できるようにすることはできません。タブレットを利用できるようにするには、おそらく別のアプリケーションを作成する必要があります。 –

+0

それは私が日食から私のXoomでそれを実行するとき、それがとてもうまく動作するので、それは奇妙です。 – mouser58907

54

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission> 

は、この関連する質問を見てみましょう

<uses-feature android:name="android.hardware.telephony" android:required="false" /> 

CALL_PHONEアクセス許可はtelephonyが必須であることを意味しますが、指定しない場合はフィルタリングされません。

+2

私はこれを行うと、ボタンをクリックすると上記のコードがクラッシュすることに言及していないと思います。 – mouser58907

+0

@Kevin、アプリケーションはフィルタリングされませんが、アプリケーションがコール機能を使用しようとするたびに、Androidはjava.lang.SecurityExceptionをスローします:許可の否認:Intent(...)を開始するにはandroid.permission.CALL_PHONEが必要です – pandre

+1

上記のようにCALL_PHONE権限を追加する必要がありますが、上記のようにuses-featureを設定すると、それをオプションにすることができます。そのため、wifiデバイス(タブレットなど)でもダウンロードできます。 –

0

宣言された要素は Androidシステム自体が

使用があるアプリケーションをインストールする前に、デバイス上の機能のサポート に一致するかどうかを確認しないことを意味し、情報提供のみですGoogle Playのみ

33

Intent.ACTION_DIAL代わりにIntent.ACTION_コール。

例えば:

try { 
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phone_number)); 
    startActivity(intent); 
} catch (Exception e) { 
    //TODO smth  
} 

そして、この場合には、あなたが完全にAndroidManifest.xmlをからこれらのタグを削除することができます。

<uses-permission android:name="android.permission.CALL_PHONE"/> 
<uses-feature android:name="android.hardware.telephony" android:required="false" /> 
+2

任意の許可を必要としないための良い答え –

+0

クール。無許可での 。 –

+0

これが答えになるはずです! –

関連する問題