0

Androidアプリケーションを作成するためにEclipseを使用するのは比較的新しいです。私の問題は、時限通知の作成に問題があることです。現時点では、 http://www.vogella.com/articles/AndroidNotifications/article.htmlの助けを借りて、ボタンを使用して通知を作成する関数を作成しました。

ボタンを使用する代わりに、コードで設定されたタイマーを使用したいと思います。助けてください!ボタンアクティベーション通知のコードは次のとおりです。

     import android.app.Activity;
     import android.app.Notification;
     import android.app.NotificationManager;
     import android.app.PendingIntent;
     import android.content.Intent;
     import android.os.Bundle;
     import android.view.View;

     public class MainActivity extends Activity {

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

          public void createNotification(View view) {
            // Prepare intent which is triggered if the
            // notification is selected
            Intent intent = new Intent(this, MainActivity.class);
            PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

            // Build notification
            // Actions are just fake
            Notification noti = new Notification.Builder(this)
                .setContentTitle("Medication")
                .setContentText("Subject").setSmallIcon(R.drawable.original)
                .setContentIntent(pIntent)
               .build();
            NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            // Hide the notification after its selected
            noti.flags |= Notification.FLAG_AUTO_CANCEL;

            notificationManager.notify(0, noti);

             Intent myIntent = new Intent(this , MainActivty.class);     
       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
       PendingIntent pIntent2 = PendingIntent.getService(ThisApp.this, 0, myIntent, 0);

       Calendar calendar = Calendar.getInstance();
           calendar.set(Calendar.HOUR_OF_DAY, 12);
       calendar.set(Calendar.MINUTE, 00);
       calendar.set(Calendar.SECOND, 00);

      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , pIntent2);  //set repeating every 24 hours

          }
        } 

main_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:onClick="createNotification"
        android:text="Create Notification" >
    </Button>

</LinearLayout> 

次の result.xml レイアウト ファイルを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is the result activity opened from the notification" >
    </TextView>

</LinearLayout> 

Alarm Manager Set notifications to specific timeを使用する方法を見つけました。このコードを追加して、毎日正午に繰り返すようにしましたが、機能していないようです。

Intent myIntent = new Intent(this , MainActivty.class);     
       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
       PendingIntent pIntent2 = PendingIntent.getService(ThisApp.this, 0, myIntent, 0);

       Calendar calendar = Calendar.getInstance();
           calendar.set(Calendar.HOUR_OF_DAY, 12);
       calendar.set(Calendar.MINUTE, 00);
       calendar.set(Calendar.SECOND, 00);

      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000 , pIntent2);  //set repeating every 24 hours
4

1 に答える 1

-1

あなたは調べたいですAlarmManager。Android アプリの UNIX cron のようなものと考えてください。簡単に言えば、将来の の起動をスケジュールしIntentます。次にBroadcastReceiver、インテントを処理する a を記述し、ここで必要なことを行います。

もちろん、悪魔は細部に宿ります。ブロードキャスト レシーバーからスレッドへの時間のかかる作業のオフロードや、事前にウェイクロックを確実に取得するなどの点に細心の注意を払ってください。これらは、SO 回答では適切にカバーできない高度なトピックです。

于 2013-01-25T18:04:04.787 に答える