当前位置:  编程技术>移动开发
本页文章导读:
    ▪PendingIntent跟Intent        PendingIntent和Intent Java代码 Notification n =  new  Notification(R.drawable.face_1,  "Service启动" , System.currentTimeMillis());   PendingIntent contentIntent = PendingIntent.getActivity(this ,  0 ,  new  Intent( this , TServiceHol.........
    ▪ 大局定时器AlarmManager(2)        全局定时器AlarmManager(2) 在编写ChangeWallpaperService类时应注意如下3点:为了通过InputStream获得图像资源,需要将图像文件放在res\raw目录中,而不是res\drawable目录中。本例采用了循环更换壁.........
    ▪ 大局定时器AlarmManager(3)       全局定时器AlarmManager(3) 8.3.5  全局定时器AlarmManager(3)本例使用BroadcastReceiver来处理定时提醒任务。BroadcastReceiver类的代码如下:package net.blogjava.mobile;  import java.util.Calendar;  import andro.........

[1]PendingIntent跟Intent
    来源: 互联网  发布时间: 2014-02-18
PendingIntent和Intent
Java代码
Notification n =  new  Notification(R.drawable.face_1,  "Service启动" , System.currentTimeMillis());  
PendingIntent contentIntent = PendingIntent.getActivity(this ,  0 ,  new  Intent( this , TServiceHolder. class ),  0 );  
n.setLatestEventInfo(this ,  "任务标题" ,  "任务内容" , contentIntent);  
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动   
Java代码 
Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());  
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);  
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);  
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动 

Notification n = new Notification(R.drawable.face_1, "Service启动", System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TServiceHolder.class), 0);
n.setLatestEventInfo(this, "任务标题", "任务内容", contentIntent);
nManager.notify(NOTIFICATION_ID, n); // 任务栏启动PendingIntent和Intent的区别:An Intent is something that is used right now; a PendingIntent is something that may create an Intent in the future. You will use a PendingIntent with Notifications, AlarmManager, etc.



1. GSM网络中android发送短信示例

(1)代码节选

Java代码
String msg = "你好,美女" ;  
String number = "135****6784" ;  
SmsManager sms = SmsManager.getDefault();  
  
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this , 0 , new  Intent(...), 0 );  
sms.sendTextMessage(number, null , msg, pi,  null );  
Toast.makeText(SmsActivity.this , "发送成功" ,Toast.LENGHT_LONG).show();  
Java代码 
String msg ="你好,美女";  
String number = "135****6784";  
SmsManager sms = SmsManager.getDefault();  
 
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);  
sms.sendTextMessage(number, null, msg, pi, null);  
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show(); 

String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();

PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show(); (2)代码解释

      PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
      函数SmsManager.sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)中参数解释:
      1)PendingIntent sentIntent:当短信发出时,成功的话sendIntent会把其内部的描述的intent广播出去,否则产生错误代码并通过 android.app.PendingIntent.OnFinished进行回调,这个参数最好不为空,否则会存在资源浪费的潜在问题;
      2)PendingIntent deliveryIntent:是当消息已经传递给收信人后所进行的PendingIntent广播。
      查看PendingIntent 类可以看到许多的Send函数,就是PendingIntent在进行被赋予的相关的操作


Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。

    
[2] 大局定时器AlarmManager(2)
    来源: 互联网  发布时间: 2014-02-18
全局定时器AlarmManager(2)
在编写ChangeWallpaperService类时应注意如下3点:

为了通过InputStream获得图像资源,需要将图像文件放在res\raw目录中,而不是res\drawable目录中。

本例采用了循环更换壁纸的方法。也就是说,共有5个图像文件,系统会从第1个图像文件开始更换,更换完第5个文件后,又从第1个文件开始更换。

更换壁纸需要使用Context.setWallpaper方法,该方法需要一个描述图像的InputStream对象。该对象通过getResources().openRawResource(...)方法获得。

在AndroidManifest.xml文件中配置ChangeWallpaperService类,代码如下:
<service android:name=".ChangeWallpaperService" />

最后来看一下本例的主程序(Main类),代码如下:
package net.blogjava.mobile; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class Main extends Activity implements OnClickListener 

    private Button btnStart; 
    private Button btnStop; 
    @Override 
    public void onClick(View view) 
    { 
        AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE); 
        //  指定ChangeWallpaperService的PendingIntent对象 
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, 
                new Intent(this, ChangeWallpaperService.class), 0); 
        switch (view.getId()) 
        { 
            case R.id.btnStart: 
                //  开始每5秒更换一次壁纸 
                alarmManager.setRepeating(AlarmManager.RTC,
0, 5000, pendingIntent);                 
                btnStart.setEnabled(false); 
                btnStop.setEnabled(true); 
                break; 
            case R.id.btnStop: 
                //  停止更换一次壁纸 
                alarmManager.cancel(pendingIntent); 
                btnStart.setEnabled(true); 
                btnStop.setEnabled(false); 
                break; 
        } 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        btnStart = (Button) findViewById(R.id.btnStart); 
        btnStop = (Button) findViewById(R.id.btnStop); 
        btnStop.setEnabled(false); 
        btnStart.setOnClickListener(this); 
        btnStop.setOnClickListener(this); 
    } 
}

在编写上面代码时应注意如下3点:

在创建PendingIntent对象时指定了ChangeWallpaperService.class,这说明这个PendingIntent对象与ChangeWallpaperService绑定。AlarmManager在执行任务时会执行ChangeWallpaperService类中的onStart方法。

不要将任务代码写在onCreate方法中,因为onCreate方法只会执行一次,一旦服务被创建,该方法就不会被执行了,而onStart方法在每次访问服务时都会被调用。

获得指定Service的PendingIntent对象需要使用getService方法。在8.3.5节介绍过获得指定Activity的PendingIntent对象应使用getActivity方法。在实例51中将介绍使用getBroadcast方法获得指定BroadcastReceiver的PendingIntent对象。

实例51:多次定时提醒

工程目录:src\ch08\ch08_multialarm

在很多软件中都支持定时提醒功能,也就是说,事先设置未来的某个时间,当到这个时间后,系统会发出声音或进行其他的工作。本例中将实现这个功能。本例不仅可以设置定时提醒功能,而且支持设置多个时间点。运行本例后,单击【添加提醒时间】按钮,会弹出设置时间点的对话框,如图8.22所示。当设置完一系列的时间点后(如图8.23所示),如果到了某个时间点,系统就会播放一个声音文件以提醒用户。


下面先介绍一下定时提醒的原理。在添加时间点后,需要将所添加的时间点保存在文件或数据库中。本例使用SharedPreferences来保存时间点,key和value都是时间点。然后使用AlarmManager每隔1分钟扫描一次,在扫描过程中从文件获得当前时间(时:分)的value。如果成功获得value,则说明当前时间为时间点,需要播放声音文件,否则继续扫描。

    
[3] 大局定时器AlarmManager(3)
    来源: 互联网  发布时间: 2014-02-18
全局定时器AlarmManager(3)
8.3.5  全局定时器AlarmManager(3)

本例使用BroadcastReceiver来处理定时提醒任务。BroadcastReceiver类的代码如下:
package net.blogjava.mobile; 

import java.util.Calendar; 
import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.media.MediaPlayer; 

public class AlarmReceiver extends BroadcastReceiver 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
        SharedPreferences sharedPreferences =
context.getSharedPreferences( 
                "alarm_record", Activity.MODE_PRIVATE); 
        String hour = String.valueOf(Calendar.
getInstance().get(Calendar.HOUR_OF_DAY)); 
        String minute = String.valueOf(Calendar.
getInstance().get(Calendar.MINUTE)); 
        //  从XML文件中获得描述当前时间点的value 
        String time = sharedPreferences.
getString(hour + ":" + minute, null); 
        if (time != null) 
        {             
            //  播放声音 
            MediaPlayer mediaPlayer =
MediaPlayer.create(context, R.raw.ring); 
            mediaPlayer.start(); 
        } 
    } 
}

配置AlarmReceiver类的代码如下:
<receiver android:name=".AlarmReceiver" android:enabled="true" />

在主程序中每添加一个时间点,就会在XML文件中保存所添加的时间点,代码如下:
package net.blogjava.mobile; 

import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.AlertDialog; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.TimePicker; 

public class Main extends Activity implements OnClickListener 

    private TextView tvAlarmRecord; 
    private SharedPreferences sharedPreferences; 
    @Override 
    public void onClick(View v) 
    { 
        View view = getLayoutInflater().inflate(R.layout.alarm, null); 
        final TimePicker timePicker = (TimePicker)
view.findViewById(R.id.timepicker); 
        timePicker.setIs24HourView(true); 
        //  显示设置时间点的对话框 
        new AlertDialog.Builder(this).setTitle("设置提醒时间").setView(view) 
                .setPositiveButton("确定", new
DialogInterface.OnClickListener() 
                { 
                    @Override 
                    public void onClick(DialogInterface dialog, int which) 
                    { 
                        String timeStr = String.valueOf(timePicker 
                                .getCurrentHour()) + ":" 
                                + String.valueOf
(timePicker.getCurrentMinute()); 
                        //  将时间点添加到TextView组件中 
                        tvAlarmRecord.setText
(tvAlarmRecord.getText().toString() + "\n" + timeStr); 
                        //  保存时间点 
                        sharedPreferences.edit().
putString(timeStr, timeStr).commit(); 
                    } 
                }).setNegativeButton("取消", null).show(); 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        Button btnAddAlarm = (Button) findViewById(R.id.btnAddAlarm); 
        tvAlarmRecord = (TextView) findViewById(R.id.tvAlarmRecord); 
        btnAddAlarm.setOnClickListener(this); 
        sharedPreferences = getSharedPreferences("alarm_record", 
                Activity.MODE_PRIVATE); 
        AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE); 
        Intent intent = new Intent(this, AlarmReceiver.class); 
        //  创建封装BroadcastReceiver的pendingIntent对象 
        PendingIntent pendingIntent = PendingIntent.
getBroadcast(this, 0,intent, 0); 
        //  开始定时器,每1分钟执行一次 
        alarmManager.setRepeating(AlarmManager.RTC,
0, 60 * 1000, pendingIntent); 
    } 
}

在使用本例添加若干个时间点后,会在alarm_record.xml文件中看到类似下面的内容:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="18:52">18:52</string>
<string name="20:16">20:16</string>
<string name="19:11">19:11</string>
<string name="19:58">19:58</string>
<string name="22:51">22:51</string>
<string name="22:10">22:10</string>
<string name="22:11">22:11</string>
<string name="20:10">20:10</string>
</map>

上面每个<string>元素都是一个时间点,定时器将每隔1分钟查一次alarm_record.xml文件。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3