2015-02-17 19 views
13

Telefonuma bu uygulama ile ağ kullanımı kullanmadan mesaj göndermeye çalışıyorum ama kodum çalışmıyor. Bazı öğreticiyi takip ettim, android devresini kontrol et ve hiçbir şey bulamadım (logcat'ımda hatam yok). Sorunumu öğrenmeme yardım eder misin?Android - Mobil şebeke kullanımı olmadan kendime sahte sms göndermeye çalışıyorum

derleme, derleyici ve telefon hakkında My bilgiler:

  • Android Studio 1.0.1

  • API 19 Android 4.4.4 (kitkat)

  • Yapı 19

  • Android telefon versiyonu 4.4.4

Bildirim: benim ana faaliyet

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

Fonksiyon:

Context context; 
String sender; 
String body; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Get current context 
    context = this; 

    //App started 
    Toast.makeText(context, "Started", Toast.LENGTH_LONG).show(); 

    CheckApp(); 
} 

private void CheckApp() { 

    sender = "1234"; 
    body = "Android sms body"; 

    //Get my package name 
    final String myPackageName = getPackageName(); 

    //Check if my app is the default sms app 
    if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) { 

     //Get default sms app 
     String defaultSmsApp = Telephony.Sms.getDefaultSmsPackage(context); 

     //Change the default sms app to my app 
     Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); 
     intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName()); 
     startActivity(intent); 

     //Write the sms 
     WriteSms(body, sender); 

     //Change my sms app to the last default sms app 
     Intent intent2 = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); 
     intent2.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultSmsApp); 
     startActivity(intent2); 
    } 
    else{ 

     //Write the sms 
     WriteSms(body, sender); 
    } 
} 

//Write the sms 
private void WriteSms(String message, String phoneNumber) { 

    //Put content values 
    ContentValues values = new ContentValues(); 
    values.put(Telephony.Sms.ADDRESS, phoneNumber); 
    values.put(Telephony.Sms.DATE, System.currentTimeMillis()); 
    values.put(Telephony.Sms.BODY, message); 

    //Insert the message 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     context.getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI, values); 
    } 
    else { 
     context.getContentResolver().insert(Uri.parse("content://sms/sent"), values); 
    } 
} 

Eh, bu ı ancak kendi uygulaması ile değil, oyun indirilen app Fake Text Message ile yapmak istiyorum ne saklayın. Sonunda benim programını tamamladı Mike M. yardımıyla

+1

, en azından, sürece onun manifest, buradaki örnekte gösterilen her şeyi içerir: [SMS Uygulamalarınızı KitKat için Hazırlama] (http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html ? m = 1). Ek olarak, ACTION_CHANGE_DEFAULT'ın amacı bittiğinde, bir onay iletişim kutusu açılır, bu yüzden yönteminizin beklediğiniz gibi çalışacağını düşünmüyorum. –

+1

Bir yan not olarak, 4.4.4'ü çalıştıran kendi cihazınızda dolaşıyorsanız, olası bir geçici çözüm için [burada yanıtımı] (http://stackoverflow.com/a/27709655/2850651) kontrol edebilirsiniz. –

+0

"SMS Uygulamalarınızı KitKat için Hazır Olma" iletisinde gösterilen örneği okudum. Bildirime eklemediğim tüm ekstra şeyler, ağdaki sms, mms (geri gönderilen, gönderilen) yönetmek için kullanılıyor (benim uygulamamda yapmak istemediğim şey). Uygulamamda yalnızca uygulama [Fake Text Message] (https://play.google.com/store/apps/details?id=com.neurondigital.FakeTextMessage&hl=fr) gibi bir sms eklemek istiyorum. Bu arada, uygulamamı telefonumdan daha fazla kullanmak istiyorum. – Albentrix

cevap

9

:

sahte mesaj ve ne benim varsayılan sms uygulaması üzerinde görmelisiniz olun. sonucunda

Context context; 
Button button; 
String sender,body,defaultSmsApp; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Get current context 
    context = this; 

    //Set composant 
    button = (Button) findViewById(R.id.button); 

    //Get default sms app 
    defaultSmsApp = Telephony.Sms.getDefaultSmsPackage(context); 

    //Set the number and the body for the sms 
    sender = "0042"; 
    body = "Android fake message"; 

    //Button to write to the default sms app 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      //Get the package name and check if my app is not the default sms app 
      final String myPackageName = getPackageName(); 
      if (!Telephony.Sms.getDefaultSmsPackage(context).equals(myPackageName)) { 

       //Change the default sms app to my app 
       Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); 
       intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName()); 
       startActivityForResult(intent, 1); 
      } 
     } 
    }); 
} 

//Write to the default sms app 
private void WriteSms(String message, String phoneNumber) { 

    //Put content values 
    ContentValues values = new ContentValues(); 
    values.put(Telephony.Sms.ADDRESS, phoneNumber); 
    values.put(Telephony.Sms.DATE, System.currentTimeMillis()); 
    values.put(Telephony.Sms.BODY, message); 

    //Insert the message 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     context.getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI, values); 
    } 
    else { 
     context.getContentResolver().insert(Uri.parse("content://sms/sent"), values); 
    } 

    //Change my sms app to the last default sms 
    Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); 
    intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultSmsApp); 
    context.startActivity(intent); 
} 

//Get result from default sms dialog pops up 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 

      final String myPackageName = getPackageName(); 
      if (Telephony.Sms.getDefaultSmsPackage(context).equals(myPackageName)) { 

       //Write to the default sms app 
       WriteSms(body, sender); 
      } 
     } 
    } 
} 

:

Bildirim::

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

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <!-- 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> 

    <!-- My activity --> 
    <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" /> 
     </intent-filter> 
    </activity> 

    <!-- 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> 

Ana Aktivite Yani, bu uygulamanıza eklemelisiniz kod ağını kullanmadan sms göndermek mümkün olmaktır Bildirimlerinize bir şeyler ekleyerek 4 sınıf eklemeniz gerekir: SmsReceiver, MmsReceiver, ComposeSmsActivity ve HeadlessSmsSendService. Aşağıda gösterildiği gibi boş bırakabilirsiniz.

SmsReceiver:

public class SmsReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    } 
} 

MmsReceiver:

public class MmsReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    } 
} 

ComposeSmsActivity:

public class ComposeSmsActivity extends ActionBarActivity { 

} 

HeadlessSmsSendService:

public class HeadlessSmsSendService extends IntentService { 
    public HeadlessSmsSendService() { 
     super(HeadlessSmsSendService.class.getName()); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 
} 
Bu programı anlamak için daha fazla yardıma ihtiyacınız olursa

orada bir göz:

Youtube - DevBytes: Android 4.4 SMS APIs

Android developers - Getting Your SMS Apps Ready for KitKat

Possiblemobile - KitKat SMS and MMS supports

uygulama, varsayılan SMS uygulaması olarak ayarlanamaz
+0

Yaramaz yaramaz! – 130nk3r5

+0

Android geliştirmeden başlıyorum - bunu işe yaradım (SMS butona bastıktan sonra gelen kutumuzda bulunur). Ancak yeni SMS ile ilgili bildirimler olmadan çalışır - ve düğmeyi her tıkladığımızda, bu uygulamayı defaul SMS uygulaması olarak kullanacağımızı "onaylamanız" gerekir. Bu nedenle - "normal SMS yaşam döngüsünü deneyimlemek" (bildirimlerle ve sürekli diyalog onayları olmadan) yapmak istediğimizde, belki de kullanım için uygun değildir. – nettutvikler

+0

@Albentrix Cant [Read] (https://developer.android.com/reference/android/provider/Telephony.TextBasedSmsColumns.html#READ) ve [Seen] değerlerini (https://developer.android) ayarladık. com/reference/android/provider/Telephony.TextBasedSmsColumns.html # SEEN) çünkü göründüğü belgelere göre yeni mesaj için bir bildirim ayarlamak için kullanılır. –