2015-05-08 57 views
7

Vì vậy, tôi đang theo dõi Tutorial tại đây khi đặt SMS của tôi làm mặc định, nhưng vì lý do nào đó mã của tôi không hoạt động. Tôi đã cố gắng tìm kiếm điều này càng nhiều càng tốt, nhưng mọi thứ đều trở lại hướng dẫn này hoặc đã lỗi thời. Tôi có cần người nhận không? Ai đó có thể giải thích những gì tôi đang làm sai?mặc định android làm ứng dụng sms mặc định

Bộ luật:

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    Log.i("MainAcitvity", "On Resume Called"); 
    // Only do these checks/changes on KitKat+, the "mSetDefaultSmsLayout" has its visibility 
    // set to "gone" in the xml layout so it won't show at all on earlier Android versions. 
    final String myPackageName = getPackageName(); 

    if (Utility.hasKitKat()) 
    { 
     if (Utility.isDefaultSmsApp(this)) 
     { 
      // This app is the default, remove the "make this app the default" layout and 
      // enable message sending components. 
      mSetDefaultSmsLayout.setVisibility(View.GONE); 
     } 
     else 
     { 
      Log.i("MainActivity", "Not Default App"); 
      // Not the default, show the "make this app the default" layout and disable 
      // message sending components. 
      mSetDefaultSmsLayout.setVisibility(View.VISIBLE); 

      Button button = (Button) findViewById(R.id.set_default_sms_button); 
      button.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View view) 
       {       
        Log.i("MainActivity", "Button Pushed"); 
        //Utility.setDefaultSmsApp(MainActivity.this); 
        Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); 
        intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName); 
        startActivity(intent); 
       } 
      }); 
     } 
    } 
} 

Các Manifest:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.intent.action.SEND" /> 
      <action android:name="android.intent.action.SENDTO" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="sms" /> 
      <data android:scheme="smsto" /> 
      <data android:scheme="mms" /> 
      <data android:scheme="mmsto" /> 

     </intent-filter> 
    </activity> 

Trả lời

14

Để ứng dụng của bạn để có đủ điều kiện để được chọn làm ứng dụng nhắn tin mặc định (như xa như hệ thống là có liên quan), bạn phải liệt kê tất cả các thành phần trong tệp kê khai như được hiển thị trong bài đăng trên blog đó, cho dù các lớp của các thành phần đó có tồn tại hay không.

<manifest> 
    ... 
    <application> 
     <!-- BroadcastReceiver that listens for incoming SMS messages --> 
     <receiver android:name=".SmsReceiver" 
      android:permission="android.permission.BROADCAST_SMS"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_DELIVER" /> 
      </intent-filter> 
     </receiver> 

     <!-- BroadcastReceiver that listens for incoming MMS messages --> 
     <receiver android:name=".MmsReceiver" 
      android:permission="android.permission.BROADCAST_WAP_PUSH"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" /> 
       <data android:mimeType="application/vnd.wap.mms-message" /> 
      </intent-filter> 
     </receiver> 

     <!-- Activity that allows the user to send new SMS/MMS messages --> 
     <activity android:name=".ComposeSmsActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" />     
       <action android:name="android.intent.action.SENDTO" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="sms" /> 
       <data android:scheme="smsto" /> 
       <data android:scheme="mms" /> 
       <data android:scheme="mmsto" /> 
      </intent-filter> 
     </activity> 

     <!-- Service that delivers messages from the phone "quick response" --> 
     <service android:name=".HeadlessSmsSendService" 
      android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" 
      android:exported="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:scheme="sms" /> 
       <data android:scheme="smsto" /> 
       <data android:scheme="mms" /> 
       <data android:scheme="mmsto" /> 
      </intent-filter> 
     </service> 
    </application> 
</manifest> 

Kể từ khi hệ thống chỉ kiểm tra biểu hiện của một ứng dụng để xác định xem nó có thể hoạt động như ứng dụng nhắn tin mặc định, không phải tất cả các lớp học những thành phần phải tồn tại cho ứng dụng của bạn để hiển thị trong danh sách lựa chọn mặc định. Điều này rất hữu ích cho việc học và thử nghiệm, nhưng, rõ ràng, nếu ứng dụng của bạn hoạt động như một ứng dụng nhắn tin mặc định của người dùng, nó sẽ thực hiện đầy đủ tất cả các thành phần được chỉ định.

Nếu bạn định thực hiện bất kỳ tác vụ nào liên quan đến SMS/MMS, bạn cũng sẽ cần các quyền liên quan. Mặc dù hệ thống dường như không kiểm tra đối với các ứng cử viên khi xác định ứng dụng mặc định đủ điều kiện, các điều khoản sau đây là cần thiết cho các hoạt động tương ứng của họ:

<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_MMS" /> 

Nếu bạn đang thiếu SEND_SMS, READ_SMS, hoặc WRITE_SMS phép khi bạn cố gắng để thực hiện hành động đã cho, SecurityException sẽ bị ném. Tuy nhiên, nếu bạn thiếu quyền hạn của RECEIVE_*, ứng dụng của bạn sẽ không được phân phối các chương trình phát sóng thích hợp và có vẻ như không có gì xảy ra khi kiểm tra các chức năng đó.

+0

M: là 'HeadlessSmsSendService' là một lớp Dịch vụ Android không? –

+0

@VineeshTP Có. Bất kỳ thành phần nào có phần tử '' sẽ là một lớp con 'Service'. –

+0

@MikeM. nếu tôi không 'làm bất cứ điều gì khác sẽ đến tin nhắn không bao giờ xuất hiện trong hộp thư của ứng dụng sms bình thường của tôi? như họ sẽ biến mất? Vì tôi muốn xem các tin nhắn SMS bình thường trong ứng dụng mặc định nhưng sử dụng ứng dụng của tôi vì tôi muốn triển khai cổng SMS. – BlackDivine

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