2014-09-12 1 views
0

Я хочу установить время и дату, используя Datepicker и Timepicker, но приложение падает, когда я нажимаю свою кнопку. вот коды:Зачем устанавливать дату и время с помощью приложения DatePicker и TimePicker Android?

public class MainActivity extends Activity { 
    DatePicker datePicker; 
    TimePicker timePicker; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     timePicker = (TimePicker) findViewById(R.id.timePicker); 
     timePicker.setIs24HourView(true); 
     datePicker = (DatePicker) findViewById(R.id.datePicker); 
    } 

    public void btnClick(View view) { 
     Toast.makeText(getBaseContext(), 
       "Date selected:" + (datePicker.getMonth() + 1) + 
       "/" + datePicker.getDayOfMonth() + 
       "/" + datePicker.getYear(), 
       Toast.LENGTH_SHORT).show(); 

     NumberFormat formatter = new DecimalFormat("00"); 
     Toast.makeText(getBaseContext(), 
       "Time selected:" + 
         timePicker.getCurrentHour() + 
         ":" + formatter.format(timePicker.getCurrentMinute()), 
       Toast.LENGTH_SHORT).show(); 

     Calendar c = Calendar.getInstance(); 
     c.set(datePicker.getYear(),Calendar.SEPTEMBER,datePicker.getDayOfMonth(), timePicker.getCurrentHour(),timePicker.getCurrentMinute(), 00); 
     AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
     am.setTime(c.getTimeInMillis()); 
    }  
} 

и это в manifast:

<permission android:name="android.permission.SET_TIME"/> 

Другой вопрос, как установить месяц в моих кодов? set() метод не принимает datePicker.getMonth().

журналы:

java.lang.IllegalStateException: Could not execute method of the activity 
      at android.view.View$1.onClick(View.java:3044) 
      at android.view.View.performClick(View.java:3511) 
      at android.view.View$PerformClick.run(View.java:14109) 
      at android.os.Handler.handleCallback(Handler.java:605) 
      at android.os.Handler.dispatchMessage(Handler.java:92) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4424) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.reflect.InvocationTargetException 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at android.view.View$1.onClick(View.java:3039) 
            at android.view.View.performClick(View.java:3511) 
            at android.view.View$PerformClick.run(View.java:14109) 
            at android.os.Handler.handleCallback(Handler.java:605) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4424) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.SecurityException: setTime: Neither user 10050 nor current process has android.permission.SET_TIME. 
      at android.os.Parcel.readException(Parcel.java:1327) 
      at android.os.Parcel.readException(Parcel.java:1281) 
      at android.app.IAlarmManager$Stub$Proxy.setTime(IAlarmManager.java:237) 
      at android.app.AlarmManager.setTime(AlarmManager.java:290) 
      at net.learn2develop.usingdatepicker.MainActivity.btnClick(MainActivity.java:45) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at android.view.View$1.onClick(View.java:3039) 
            at android.view.View.performClick(View.java:3511) 
            at android.view.View$PerformClick.run(View.java:14109) 
            at android.os.Handler.handleCallback(Handler.java:605) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4424) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

Опубликовать свой логарифм –

+0

можете ли вы отправить логарифм, пожалуйста? – Umair

+0

Я отредактировал мой пост –

ответ

0

Ваше устройство должно быть укорененные.

Пожалуйста, добавьте разрешение в AndroidManifest.xml

<permission android:name="android.permission.SET_TIME" 
    android:protectionLevel="signature|system" 
    android:label="@string/permlab_setTime" 
    android:description="@string/permdesc_setTime" /> 

попробовать это сейчас.

0

Вызов setTime() на AlarmManager требует разрешения SET_TIME, и вы не можете получить его как стороннего разработчика приложений. Это системное разрешение, и ваше приложение должно быть системным приложением, подписанным с ключом подписи платформы, чтобы получить его. Или вам нужно быть root.

+0

Я не хочу тревоги. просто хотите установить дату и время –

+0

Вы не можете, если вы не системное приложение, или у вас есть root. – laalto

+0

Это уже коренится –