2017-10-06 113 views
-1

我試圖製作一個鬧鐘應用程序,該應用程序在DialogFragment中顯示TimePicker,但每次點擊切換時,我的應用程序崩潰。在DialogFrament中顯示TimePicker時報警應用程序崩潰

這裏是我從中找到了源代碼此鏈接:http://codingconnect.net/android-application-creates-alarm-clock/

此外,如何存放時間格式的對象在我的數據庫?

對話框

package com.example.asus.test8; 


import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.DialogFragment; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TimePicker; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

import java.util.Calendar; 

public class dialog extends DialogFragment 
{ 


TimePicker alarmTimePicker; 
PendingIntent pendingIntent; 
AlarmManager alarmManager; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) { 
    View view= inflater.inflate(R.layout.dialog,container,false); 
    alarmTimePicker = (TimePicker) 
getActivity().findViewById(R.id.timePicker); 
    alarmManager = (AlarmManager) 
getActivity().getSystemService(Context.ALARM_SERVICE); 
    return view; 
} 
public void OnToggleClicked(View view) 
{ 
long time; 
if (((ToggleButton) view).isChecked()) 
{ 
    Toast.makeText(getActivity(), "ALARM ON", Toast.LENGTH_SHORT).show(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); 
    calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); 
    Intent intent = new Intent(getActivity(), AlarmReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0); 

    time=(calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000)); 
    if(System.currentTimeMillis()>time) 
    { 
     if (calendar.AM_PM == 0) 
      time = time + (1000*60*60*12); 
     else 
      time = time + (1000*60*60*24); 
    } 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, 
pendingIntent); 
} 
else 
{ 
    alarmManager.cancel(pendingIntent); 
    Toast.makeText(getActivity(), "ALARM OFF", Toast.LENGTH_SHORT).show(); 
} 
} 
} 

MainActivity

package com.example.asus.test8; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ListView; 

public class MainActivity extends AppCompatActivity { 

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

    ListView l; 
    l= (ListView) findViewById(R.id.listView); 

    FloatingActionButton fab = (FloatingActionButton) 
findViewById(R.id.fab); 

} 
public void click(View v) 
{ 

FragmentManager fm=getSupportFragmentManager(); 
dialog dg=new dialog(); 
dg.show(fm,"TAG"); 
} 

AlarmReceiver

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.content.WakefulBroadcastReceiver; 
import android.widget.Toast; 

public class AlarmReceiver extends WakefulBroadcastReceiver 
{ 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Toast.makeText(context, "Alarm! Wake up! Wake up!", 
Toast.LENGTH_LONG).show(); 
    Uri alarmUri = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    if (alarmUri == null) 
    { 
     alarmUri = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    } 
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri); 
    ringtone.play(); 

} 
} 

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.asus.test8"> 


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 
    <activity android:name=".MainActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="com.example.asus.test8.AlarmReceiver" > 
    </receiver> 
</application> 

</manifest> 
+3

張貼您的logcats – sasikumar

+0

正如sasikumar所說,我們需要查看您的logcats的任何錯誤,這可能有助於更輕鬆地解釋代碼中的問題。 –

回答

1

嘗試添加​​,不要忘記在YourActivity檢查請求的權限。

+0

查詢請求? –

+1

是的。 「從Android 6.0(API級別23)開始,用戶可以隨時撤銷任何應用程序的權限」https://developer.android.com/training/permissions/requesting.html – Dungnbhut

+0

試過它沒有用。 –