2013-04-16 17 views
7

Tôi đã xuất bản ứng dụng của mình trên Cửa hàng Play nhưng ứng dụng này không khả dụng cho máy tính bảng. Tôi đã kiểm tra chức năng của ứng dụng trên cửa hàng Google Play và sau khi một số nghiên cứu nhận thấy rằng ứng dụng của tôi có một số tính năng Điện thoại mà tôi tin là bên có tội. Đây là tệp kê khai của tôi.<uses-permission android: name = "android.permission.SEND_SMS" />

<uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 

    <!-- GCM requires a Google account. --> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

    <!-- Keeps the processor from sleeping when a message is received. --> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <permission 
     android:name=".permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

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

    <!-- This app has permission to register and receive data message. --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <!-- Keeps the device on vibrating mode when a message is received. --> 
    <uses-permission android:name="android.permission.VIBRATE" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Black.NoTitleBar" > 

     <receiver 
      android:name="com.google.android.gcm.GCMBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="" /> 
      </intent-filter> 
     </receiver> 

     <service android:name=".GCMIntentService" /> 

     <activity 
      android:name=".Splash" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".MainActivity" 
      android:screenOrientation="portrait"> 
     </activity> 

      <activity 
      android:name=".SelectedArticlePush" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".ActusScreen" 
      android:screenOrientation="portrait"> 
     </activity> 

      <activity 
      android:name=".MentionLegale" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".SelectedArticle" 
      android:screenOrientation="portrait" 
      android:windowSoftInputMode="stateAlwaysHidden|adjustPan">> 
     </activity> 

     <activity 
      android:name=".ReglementScreen" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".SelectedReglementation" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".FavoriteScreen" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".AlertScreen" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".ClubScreen" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name="ClubMi" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".DisplayWeb" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".Contact" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".tab.TabClubMi" 
      android:screenOrientation="portrait"> 
     </activity> 

     <activity 
      android:name=".SMS" 
      android:screenOrientation="portrait" 
      android:theme="@style/Theme.Transparent" > 
     </activity> 

    </application> 

    <supports-screens 
      android:largeScreens="true" 
      android:normalScreens="true" 
      android:smallScreens="true" 
      android:resizeable="true" 
      android:anyDensity="true" /> 

Tôi tin rằng <uses-permission android:name="android.permission.SEND_SMS" /> kích hoạt chức năng Điện thoại. Tuy nhiên tôi cần sự cho phép này để gửi tin nhắn. Bất cứ ai có thể cho tôi biết nếu có một cách thay thế để vượt qua điều này nếu chạy trong một máy tính bảng.

+0

Xem ứng dụng có sẵn cho Máy tính bảng có hỗ trợ cho SIM hay không. – midhunhk

Trả lời

2

Bạn quên thêm xlargeScreens vào số Manifest của mình.

<supports-screens 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:xlargeScreens="true" /> 

EDIT: thẻ <uses-permissions> không thực thi bất kỳ phần cứng hay khả năng trên thiết bị, chỉ cần thẻ <uses-feature> thực thi khả năng, khi required được thiết lập để true.

+0

những gì về các công cụ điện thoại – yakusha

+0

@yakusha Nó không nên ảnh hưởng đến khả năng hiển thị, như tôi có thể tải về các ứng dụng với sự cho phép NFC trong một điện thoại mà không có nó. Câu trả lời này có vẻ hợp lý hơn. – Aballano

+0

oki tôi sẽ thử và hoàn nguyên lại – yakusha

15

Thêm một khối sử dụng tính năng này để-Manifest của bạn:

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

Trên đây nói với thiết bị mà tính năng này được sử dụng trong ứng dụng của bạn. Tuy nhiên, các android:required="false", đảm bảo rằng đây không phải là một yêu cầu nghiêm ngặt và sẽ cài đặt ứng dụng bất kể thiết bị hỗ trợ tính năng android.hardware.telephony.

Tuy nhiên, tạo một vấn đề mới. Lo lắng không. Một giải pháp sau. :-)

Điều gì xảy ra khi thiết bị không hỗ trợ tính năng android.hardware.telephony cố gắng sử dụng chức năng này theo bất kỳ cách nào? Trong trường hợp của bạn, gửi một tin nhắn SMS. Một giải pháp đơn giản là, để kiểm tra xem thiết bị có khả năng sử dụng các tính năng Điện thoại hay không.

TelephonyManager tm = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
if (tm.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) { 
    // SHOW A DIALOG, A TOAST OR A NOTIFICATION TO TELL THE USER THAT THE FEATURE IS MISSING 
} else { 
    // RUN THE CODE TO SEND OUT THE SMS 
} 

Và tôi nghĩ đây là giải pháp trong trường hợp thiết bị đang chạy là thiết bị CDMA.

String strTM = ((TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number(); 
if (strTM == null) { 
    // SHOW A DIALOG, A TOAST OR A NOTIFICATION TO TELL THE USER THAT THE FEATURE IS MISSING 
} else { 
    // RUN THE CODE TO SEND OUT THE SMS 
} 

Một trong các khối mã trên, cần READ_PHONE_STATE phép:

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

Có thêm một cách để kiểm tra (sử dụng PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) nếu thiết bị có những tính năng nói. Cá nhân tôi chưa bao giờ kiểm tra nó, nhưng OP cho biết nó hoạt động. https://stackoverflow.com/a/6568243/450534

+0

nơi tôi nên đặt yakusha

+0

@yakusha : Bạn có thể đặt mã đó sau hoặc trước các khai báo 'uses-permission' nhưng bên ngoài khối' application'. –

+0

Trong tệp kê khai. –

Các vấn đề liên quan