Android - 尝试在没有移动网络使用的情况下向自己发送虚假短信 [英] Android - Try to send fake sms to myself without mobile network usage

查看:150
本文介绍了Android - 尝试在没有移动网络使用的情况下向自己发送虚假短信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用此应用向我的手机发送消息,而不使用网络使用,但我的代码不起作用。我按照一些教程,检查android dev,我没有找到任何东西(在我的logcat中我没有错误)。你能帮我解决一下我的问题。



关于编译,编译和电话的信息:




  • Android Studio 1.0.1


  • API 19 Android 4.4.4(kitkat)


  • Build 19


  • Android手机版本4.4.4




清单:

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

我的主要活动的功能:

 上下文上下文; 
字符串发送者;
String body;

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

//获取当前上下文
context = this;

//应用程序启动
Toast.makeText(context,Started,Toast.LENGTH_LONG)。show();

CheckApp();
}

private void CheckApp(){

sender =1234;
body =Android sms body;

//获取我的包名
final String myPackageName = getPackageName();

//检查我的应用程序是否是默认短信应用程序
if(!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)){

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

//将默认短信应用程序更改为我的应用程序
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,context.getPackageName());
startActivity(intent);

//写短信
WriteSms(正文,发送者);

//将我的短信应用程序更改为最后一个默认短信应用程序
意图intent2 =新意图(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent2.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,defaultSmsApp);
startActivity(intent2);
}
else {

//写短信
WriteSms(正文,发送者);
}
}

//写短信
private void WriteSms(String message,String phoneNumber){

//放置内容values
ContentValues values = new ContentValues();
values.put(Telephony.Sms.ADDRESS,phoneNumber);
values.put(Telephony.Sms.DATE,System.currentTimeMillis());
values.put(Telephony.Sms.BODY,message);

//插入消息
if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT){
context.getContentResolver()。insert(Telephony.Sms。 Sent.CONTENT_URI,值);
}
else {
context.getContentResolver()。insert(Uri.parse(content:// sms / sent),values);
}
}

嗯,这就是我想做但我的自己的应用,而非应用



Android开发人员 - 为KitKat准备好SMS应用程序



Possiblemobile - KitKat短信和彩信支持


I'm trying to send message to my phone with this app, without using network usage, but my code doesn't work. I followed some tutorial, check android dev and I haven't found anything (in my logcat I don't have error). Could you help me to find out my problem.

My information about compilation, compiler and phone:

  • Android Studio 1.0.1

  • API 19 Android 4.4.4 (kitkat)

  • Build 19

  • Android phone version 4.4.4

Manifest:

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

Function of my main activity:

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);
    }
}

Well, this is what i wanna do but with my own app and not with the app Fake Text Message that downloaded to the play store.

Make the fake message and what should i see on my default sms app:

解决方案

With the help from Mike M. I finally finished my program. So, this is the code that you must add to your app to be able to send sms without using network:

Manifest:

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

Main Activity:

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);
            }
        }
    }
}

As a result of adding things in your manifest you must add 4 classes: SmsReceiver, MmsReceiver, ComposeSmsActivity and HeadlessSmsSendService. You can let them empty as shown below.

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");
    }
}

If you need more help to understand this program have a look there:

Youtube - DevBytes: Android 4.4 SMS APIs

Android developers - Getting Your SMS Apps Ready for KitKat

Possiblemobile - KitKat SMS and MMS supports

这篇关于Android - 尝试在没有移动网络使用的情况下向自己发送虚假短信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆