0

次のような登録情報のために電話番号にアクセスする Android 電話アプリがあります。

    String thisPhoneNumber = "0";
    try {
        TelephonyManager tMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        thisPhoneNumber = tMgr.getLine1Number(); }
    catch (Exception e) { }

電話では問題なく動作します。友人がタブレット (最近のもの) で試してみたところ、アプリがクラッシュしました。try/catch の 4 行をコメント アウトすると、正常に動作するため、getSystemService 呼び出しでクラッシュが発生したように見えます。

少しstackoverflowを検索すると、コードはどちらのプラットフォームでも実行できるように思えますが、それは私が見ているものではありません。

try/catch でクラッシュを防ぎ、例外を処理できるようにすべきではありませんか?

タブレットでクラッシュすることなく getSystemService を実行できるようにする他の方法はありますか? それとも、タブレットでその電話をかけなくてもいいですか?

4

1 に答える 1

0

ifステートメントでチェックして、それらの2〜3行の変数がnullかどうかを確認し、そうであればコードの実行を停止します。たとえば、

{ TelephonyManager tMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); を試してください。if(tMgr!=null) thisPhoneNumber = tMgr.getLine1Number(); } cat(例外 o) {}

または、デバイスがタブレットか電話か (電話または電話以外のデバイス) を検索してから、if コード if(phone) { コード} で 2 つの異なるステートメントを実行するか、電話番号を検索する関数を持つ抽象クラスを使用できます。そして、いくつかのように考えます

if(device is phone)
{
  apstractClass=new phoneImplementation();
} else
{
  apstractClass= new nonPhoneImplementation();if (((TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
== null)

{ // 電話なし } enter code here } thisPhoneNumber=apstarctClass.getPhoneNumber()

phoneImplementation().getPhoneNumber() にはコードがあり、質問のコードと nonPhoneImplementation().getPhoneNumber() は 0 を返します。

デバイスに電話機能があるかどうかを確認できます

if (((TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
    == null)
{
    // no phone
} 

私の意見は、これがあなたの問題を解決するということです:

String thisPhoneNumber = "0";
try
{
    if (((TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number()
        != null)
    {
         thisPhoneNumber = tMgr.getLine1Number();
    } }
catch(Exception o)
{}
于 2012-11-05T23:06:25.677 に答える