2012-11-14 5 views
0

데이터베이스에 저장된 시간 값으로 알람을 재생해야하는 앱이 있습니다. "notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;"문을 삭제하면 알림이 표시됩니다. 난 내 application.My 경보 클래스를 clossing 강제로 다음 위의 문 경보 연극을 삽입합니다 alarm.when를 재생하지 않고 그 알람 시간은 다음입니다 :NotificationManager를 사용하여 예외가 발생했습니다.

public class AlarmManager extends BroadcastReceiver { 

sampleDatabase appdb; 
SQLiteDatabase sqldb; 
Cursor cursor; 
int today,prev; 
Intent in; 

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    NotificationManager manger = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.icon , "Yahrzeit" , System.currentTimeMillis()); 
    in = new Intent(context,FirstAppActivity.class); 
    in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, in, 0); 
    notification.setLatestEventInfo(context, "ALERT!!!!", "Time Over" , contentIntent); 
    notification.defaults=Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE; 
    notification.flags = Notification.FLAG_INSISTENT; 
    appdb = new sampleDatabase(context); 
    sqldb = appdb.getReadableDatabase(); 
    cursor = sqldb.query(sampleDatabase.TABLE_SEC, null, null, null, null, null, null); 
    cursor.moveToFirst(); 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.SECOND, 0); 
    today = (int)(cal.getTimeInMillis()/1000); 
    Log.e("Naga","Alarm"); 
    Log.e("today",Integer.toString(today)); 
    prev = 0; 
    cursor.moveToPrevious(); 
    while(cursor.moveToNext()) 
    { 
     int dbdate = cursor.getInt(cursor.getColumnIndex(sampleDatabase.ALARMSET)); 
     int id = cursor.getInt(cursor.getColumnIndex(sampleDatabase.ROW_ID)); 
     Log.e("dbdate",Integer.toString(dbdate)); 
     if((dbdate<=today)&&(dbdate>prev)) 
     { 
      manger.cancelAll(); 
      manger.notify(1, notification); 
      sqldb.execSQL("DELETE from " + sampleDatabase.TABLE + " where " + sampleDatabase.ROW_ID + "=" + id); 
      sqldb.execSQL("DELETE from "+sampleDatabase.TABLE_SEC + " where " + sampleDatabase.ROW_ID + "=" + id); 

     } 
     prev = dbdate; 
    } 
    cursor.close(); 
    sqldb.close(); 

} 

내 로그 캣보기 (내가 진동 권한을 삽입 한이 같다,)이 오류도 발생합니다.) :

11-14 18:09:18.000: ERROR/AndroidRuntime(757): FATAL EXCEPTION: main 
11-14 18:09:18.000: ERROR/AndroidRuntime(757): java.lang.RuntimeException: Unable to start receiver com.nagainfo.firstAp.AlarmManager: java.lang.SecurityException: Requires VIBRATE permission 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.ActivityThread.access$3200(ActivityThread.java:125) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.os.Looper.loop(Looper.java:123) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at dalvik.system.NativeStart.main(Native Method) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757): Caused by: java.lang.SecurityException: Requires VIBRATE permission 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.os.Parcel.readException(Parcel.java:1247) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.os.Parcel.readException(Parcel.java:1235) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.NotificationManager.notify(NotificationManager.java:110) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.NotificationManager.notify(NotificationManager.java:90) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at com.nagainfo.firstAp.AlarmManager.onReceive(AlarmManager.java:52) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810) 
11-14 18:09:18.000: ERROR/AndroidRuntime(757):  ... 10 more 

Pls 나를 도와주세요. 내 매니페스트는 다음과 같습니다

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".FirstAppActivity" 
       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 android:name=".addtable" 
         android:label="@string/app_name"> 
       </activity> 
       <activity android:name=".showTime" 
         android:label="@string/app_name"> 
       </activity> 
       <activity android:name=".edittable" 
         android:label="@string/app_name"> 
       </activity> 
       <receiver android:name="AlarmManager"> 
       </receiver> 
       <uses-permission android:name="android.permission.READ_CALENDAR"/> 
       <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
       <uses-permission android:name="android.permission.VIBRATE"/> 
</application> 

+0

제목이 변경되었습니다. 32 비트 및 64 비트 OS가 실제로 작동하지 않았습니다. – Simon

+0

@ Simon 감사합니다. 내 제목을 변경하는 것을 잊었습니다. – Techy

답변

5
Caused by: java.lang.SecurityException: Requires VIBRATE permission 

이 매니페스트에 진동 권한을 추가합니다.

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

이 태그를 애플리케이션 태그 내에 넣었습니다. 응용 프로그램 태그 외부에 있어야합니다. 좋아요 :

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

    package="name.xml" 
    android:versionCode="24" 
    android:versionName="3.4" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <uses-permission android:name="android.permission.READ_CALENDAR"/> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
    <uses-permission android:name="android.permission.VIBRATE"/> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

     <activity android:name=".FirstAppActivity" 
      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 android:name=".addtable" 
      android:label="@string/app_name"> 
     </activity> 

     <activity android:name=".showTime" 
       android:label="@string/app_name"> 
     </activity> 

     <activity android:name=".edittable" 
       android:label="@string/app_name"> 
     </activity> 

     <receiver android:name="AlarmManager"> 
     </receiver> 

    </application> 
+0

해당 권한을 제공했습니다. – Techy

+0

해당 권한을 이미 제공 했음에도 불구하고 여전히 충돌했거나 보유하고 있음을 의미합니까? 그것을 추가, 그리고 여전히 충돌? – Simon

+0

@ Simon 나는 그 물건을 추가했다. 그리고 그것은 또한 부서진다. – Techy

관련 문제