CodeForge QQ客服 CodeForge 400电话 客服电话 4006316121
首页 » 源代码 » Android SMS、句柄、Runnable 和服务

Android SMS、句柄、Runnable 和服务

maninwest
发布于2015-02-13 16:10:01
源码作者
浏览次数:
下载次数:2
下载所需积分:1 
源码分类 Tags:
源码分类 所属分类:
AndroidAndroid JavaJava

分享有礼! 》

  • 请点击右侧的分享按钮,把本代码分享到各社交媒体。
  • 通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
  • 通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。

代码介绍

翻译 maninwest@Codeforge 作者:Safak Tarazan@CodeProject
这里讨论以下话题:
通过 Intent 传递额外数据并获取此数据
开始/停止一个服务
如何使用后台服务,以及如何在 AndroidManifest.xml 文件中登记
Handler 和 Runnable 对象
为了介绍这些话题,我创建了一个简单应用,它可在指定时间内按顺序发送很多 SMS。
你可以在  Goo gle Play 中安装这个应用
背景
你需要了解 Java 和 Android 平台
使用代码
开始写代码前,需要了解应用的结构。在这个演示应用中,我们将采用最简单的步骤:
在  MainActivity 上:从用户处获取需要的信息,如目的地号/时间顺序等。
将此信息通过  Intent  传递给一个 服务,来处理 SMS 发出操作
写一个 handler 和 runnable 来定期发送 SMS
在此演示中,有两个类:
MainActivity
trollService
1. 从用户处获取所需信息
A) Activity_main.xml

   

   

       

   

   

   
   
   

B) MainActivty.java

public class MainActivity
extends Activity {
 
            EditText number;
            EditText message;
            Button send;
            Button stop;
            EditText squence;
            
            Context context=this;            
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_main);
                        
                        number = (EditText)
findViewById(R.id.numberText);
                        message = (EditText)
findViewById(R.id.messageText);
                        squence = (EditText)
findViewById(R.id.sqence);
                        send = (Button) findViewById(R.id.trollBtn);
                        stop = (Button) findViewById(R.id.stop);
               
                        send.setOnClickListener(new OnClickListener()
{
                                    
                                    @Override
                                    public
void onClick(View v) {
                                                
                                    }
                        });
                        
                        stop.setOnClickListener(new OnClickListener()
{
                                    }
                        });
            }
}


2.通过 Intent 将信息传递给服务


在这里,我们创建 Intent 对象并使用上下文初始化,并创建我们要激活的类。
为 Intent (Intent.FLAG_ACTIVITY_NEW_TASK) 对象设置一个标志位,这样trollService.class 如果已经存在就不会再创建。同样,还有一个标志位FLAG_ACTIVITY_MULTIPLE_TASK,如果我们要使用这个标志位,trollService.class 就会被创建 -尽管已经有一个trollServicer 在运行。
通过使用方法 putExtra,首先我们给出 key 然后给出key值,这样我们就可以将数据传递给其他服务或 Activity.
我们使用 startService(trollIntent) 方法开始服务,该方法需要一个  intent 对象。我们也可以使用 context.startActivity(Intent) 开始Activity 或者使用以下方法同时开始多个 Activity :context.startActivities(Intents),在这里  intents 是一个 Intent对象数组。.
要停止 Activity 或Service,我们使用:

contex.stopService(Intnet)
context.stopActivity(Intent) 

         
Intent trollIntent = new Intent
		(context,trollService.class);
         trollIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         trollIntent.putExtra("Number", number.getText().toString());
         trollIntent.putExtra("Message", message.getText().toString());
         trollIntent.putExtra("Squence", 
         Integer.parseInt(squence.getText().toString()));
         context.startService(trollIntent);

最后,我们的 MainActivity将会这样:
number = (EditText) findViewById(R.id.numberText);
message = (EditText) findViewById(R.id.messageText);
squence = (EditText) findViewById(R.id.sqence);
send = (Button) findViewById(R.id.trollBtn);
stop = (Button) findViewById(R.id.stop);   
  
send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {

Intent trollIntent = new Intent(context,trollService.class);
trollIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
trollIntent.putExtra
("Number", number.getText().toString());
trollIntent.putExtra
("Message", message.getText().toString());
trollIntent.putExtra("Squence", 
Integer.parseInt(squence.getText().toString()));
context.startService(trollIntent); 
}
});

stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {

Intent trollIntent = new Intent(context,trollService.class);
trollIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.stopService(trollIntent); 
}
}); 

3. 在 Service  类中写一个 Handler 和 Runnable来定期发送 SMS
什么是 Runnable 和 Handler?
Runnable 对象可以看作一个可以发送给消息队列进行执行的一个命令 。handler 对象则帮助 Runnable 对象发送此命令到队列。
我们的 Service 类
要发送消息,我们创建了 SmsManager对象并使用sentTextMessage 方法,通过从 intent 中使用Intent.getExtra() 提取数据来初始化消息。
之后,创建 Runnable 对象,将功能写入队列来执行。具体来说,创建了一个句柄并设置时间队列。
你可认为 Runnable 对象负责在内部写入方法,句柄设置时间顺序,这样可以定期发出 SMS
 final Handler handler=new Handler();
		 
	       final Runnable r = new Runnable()
	       { int i=1;
	           public void run() 	          
	           
	     {     if(!run)
			return;
	       handler.postDelayed(this, 
	       intent.getExtras().getInt("Squence")*1000);
	       SmsManager smsManager =     SmsManager.getDefault();
	       smsManager.sendTextMessage
	       (intent.getExtras().getString("Number"), 
	       null,intent.getExtras().getString
	       ("Message"), null, null);
	       Toast.makeText(getBaseContext(),+i+ 
	       "SMS Sent", Toast.LENGTH_LONG).show();
					i++;
	           }
	       };    
	  
       handler.postDelayed(r, intent.getExtras().getInt("Squence")*1000); 

总结


不要太相信我在这里写的。我可能说的不对。只需通过这些熟悉一下 service, smsmanager 等。
尝试自己写代码而不是运行我的示例代码。
标志位很重要,需要留意。

参考资料:


http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
http://developer.android.com/reference/android/os/Handler.html
Sponsored links

源码文件列表

温馨提示: 点击源码文件名可预览文件内容哦 ^_^
...
名称 大小 修改日期
.classpath364.00 B2013-03-09 18:57
.project843.00 B2013-03-09 18:57
org.eclipse.jdt.core.prefs177.00 B2013-03-09 18:57
AndroidManifest.xml1.20 kB2013-03-09 19:02
AndroidManifest.xml1.20 kB2013-06-20 14:03
BuildConfig.class347.00 B2013-06-29 16:57
R$attr.class343.00 B2013-06-30 15:48
R$drawable.class410.00 B2013-06-30 15:48
R$id.class553.00 B2013-06-30 15:48
R$layout.class406.00 B2013-06-30 15:48
R$menu.class400.00 B2013-06-30 15:48
R$string.class473.00 B2013-06-30 15:48
R$style.class434.00 B2013-06-30 15:48
R.class634.00 B2013-06-30 15:48
MainActivity$1.class1.75 kB2013-06-29 16:57
MainActivity$2.class1.17 kB2013-06-29 16:57
MainActivity.class1.34 kB2013-06-29 16:57
trollService$1.class2.06 kB2013-06-29 16:57
trollService.class1.87 kB2013-06-29 16:57
classes.dex437.27 kB2013-03-09 19:03
android-support-v4-3b71ba158b1b91642bb31e8ac62ba6eb.jar146.26 kB2013-03-09 18:57
annotations-62bab95d6948a2db17bbc7976160b014.jar943.00 B2013-03-09 18:57
ic_launcher.png6.15 kB2013-03-09 18:57
ic_launcher.png2.12 kB2013-03-09 18:57
ic_launcher.png3.22 kB2013-03-09 18:57
ic_launcher.png9.85 kB2013-03-09 18:57
resources.ap_25.85 kB2013-03-09 19:03
SmsBomp.apk177.39 kB2013-03-09 19:03
BuildConfig.java161.00 B2013-06-20 14:03
R.java1.83 kB2013-06-30 15:48
ic_launcher-web.png46.73 kB2013-03-09 19:00
android-support-v4.jar376.65 kB2013-03-09 18:57
proguard-project.txt781.00 B2013-03-09 18:57
project.properties562.00 B2013-03-09 18:57
ic_launcher.png4.36 kB2013-03-09 19:00
ic_launcher.png1.80 kB2013-03-09 19:00
ic_launcher.png2.41 kB2013-03-09 19:00
ic_launcher.png6.76 kB2013-03-09 19:00
activity_main.xml1.55 kB2013-03-09 18:59
activity_main.xml219.00 B2013-03-09 18:57
strings.xml220.00 B2013-03-09 18:57
styles.xml695.00 B2013-03-09 18:57
MainActivity.java1.74 kB2013-03-09 18:59
trollService.java1.91 kB2013-03-09 18:58
程序员商城

资源评论

(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
  • 1
  • 第1页
  • 共1页

Android SMS、句柄、Runnable 和服务 (922.01 kB)

需要 1 积分
您持有 积分

CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了 了解更多

您的积分不足,优惠套餐快速获取 30 积分

订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。

更多付款方式:网银PayPal

上传代码,免费获取CodeForge积分

您本次下载所消耗的积分将转交上传作者。

同一源码,30天内重复下载,只扣除一次积分。

登录 CodeForge

还没有CodeForge账号? 立即注册
关注微博
联系客服

Switch to the English version?

Yes
CodeForge 英文版
No
CodeForge 中文版

完善个人资料,获价值¥30元积分奖励!

^_^"呃 ...

Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧
好的