在学习AlarmManager的使用方法的时候,遇到了问题,一个很简单的实例代码,但是总是不出效果,在此请教大家:
    SetAlarm.java
    
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.util.Log;public class SetAlarm extends Activity { /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Intent intent = new Intent(this,AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 20*1000, pi);
Log.i("Ray","Alarm has been set");

// Intent in = new Intent();
// in.setClass(this, AlarmReceiver.class);
// this.sendBroadcast(in);
}
}
    AlarmReceiver.java
    import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;public class AlarmReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.v("Ray","AlarmRecerver get something");

Toast.makeText(context, "Ray", Toast.LENGTH_SHORT).show();
}}
  Manifest
  
  <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="test.ray.alarm"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SetAlarm"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <receiver android:name=".AlarmReceiver" android:process=":remote">
    </receiver> 
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest> 
     这里很多权限都是不必要的,我纯粹是为了保证权限不会出问题。貌似这个实例代码,一个权限也不需要添加的吧?
     估计问题出在AlarmReceiver上,但是我不知道问题在哪里,希望大家指导。

解决方案 »

  1.   

    http://www.javaeye.com/wiki/topic/830420
      

  2.   

        关键在于Log.v("Ray","AlarmRecerver get something");也没能看到log
      

  3.   


    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="test.ray.alarm"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".SetAlarm"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <receiver android:name=".AlarmReceiver" android:process=":remote"/>
            </activity>
        </application>
    </manifest> 这样试试
      

  4.   


    试了,貌似还是老样子。不过receiver标签包含在activity标签内这种写法有什么区别么?
      

  5.   

    只有一个button
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
        <Button
         android:id="@+id/btnSetAlarm"
         android:text="SetAlarm"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal"
         ></Button>
    </LinearLayout>
      

  6.   

    找到原因了,晕死,我在manifest文件中,把receiver标签放在了Application标签的外面了。
        这个receiver能起效就有怪了