2016-02-11 5 views
1
public class MyBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Calendar c = Calendar.getInstance(); 
     hour=c.get(Calendar.HOUR_OF_DAY); 
     minute=c.get(Calendar.MINUTE); 
     Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute); 
     SimpleDateFormat sdf = new SimpleDateFormat("hh:mm"); 
     String date = sdf.format(calendar.getTime()); 
     String str=date.charAt(0)+""+date.charAt(1)+""+date.charAt(3)+""+date.charAt(4); 
     minochaDevicePolicyManager.resetPassword(str,0); 
    } 
} 

Привет, ребята, поэтому проблема в том, что мне нужно создать класс для этого ресивера, и я не знаю, как это сделать. Мне нужно, чтобы это было связано с моим основным классом деятельности, поскольку переменные там (ex minochaDevicePolicyManager). Как это сделать. Да, я попытался найти в сети, и я придумал этот сайт, но он не был действительно полезным. Как это сделать? Вот моя служба сигнализации в основной деятельности -> OnCreateсигнализация приемник андроида

Context context=getApplicationContext(); 
    alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, MyBroadcastReceiver.class); 
    alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
      1000 * 60, alarmIntent); 

Теперь, как это сделать. Мне нужен класс для моего приемника, и он должен быть связан с основным видом деятельности

+0

Пожалуйста предоставить код того, как вы создаете экземпляр minochaDevicePolicyManager в своем MainActivity – CodeChimp

+0

Если вы спрашиваете, где разместить свой открытый публичный класс, MyBroadcastReceiver расширяет код BroadcastReceiver {', просто пожалуйста, где-нибудь в своем основном действии, я рекомендую где-то ниже ваших основных видов деятельности. – Strider

+0

не забудьте зарегистрировать приемник в вашем манифесте. Xml! – Strider

ответ

0

Вам нужен одноэлементный объект, доступный как от MainActivity, так и от MyBroadcastReceiver.

Добавить новый App.java класс следующим образом

package ....; 

import android.app.Application; 

public class App extends Application { 
    public DevicePolicyManager minochaDevicePolicyManager; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     minochaDevicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_‌​POLICY_SERVICE); 
    } 
} 

Затем измените AndroidManifest.xml ссылаться на класс App

<application 
    android:name="App" ...> 

Тогда в обоих вашей MainActivity и MyBroadcastReceiver, когда вы хотите использовать экземпляр DevicePolicyManager выполняет следующее:

Добавить переменную-член в верхней части обоих классов

private fullpackagename.App app; 

Получить ссылку на него в пределах вашего MainActivity OnCreate и MyBroadcastReceiver OnReceive методов с использованием следующих

this.app = ((App) getApplicationContext()); 

Чтобы использовать экземпляр просто обратитесь к app.minochaDevicePolicyManager

app.minochaDevicePolicyManager.resetPassword(str,0); 
+0

Эй, он не работает:/ –

+0

«Получите ссылку на него в своем OnCreate или OnReceive» onReceive не связан с MainActivity вообще. показывает, что он никогда не использовался (greyed out) –

+0

В вашей MainActivity добавьте this.app = ((App) getApplicationContext()); к OnCreate. В своем MyBroadcastReceiver добавьте строку в OnReceive. – CodeChimp

0

Even хотя вы просите одной ссылки на minochaDevicePolicyManager, так как я предполагаю, что вы не используете его, что часто нет никаких причин, вы не можете просто создать новый экземпляр в MyBroadcastReceiver с использованием context прошел в.

public class MyBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Calendar c = Calendar.getInstance(); 
     hour=c.get(Calendar.HOUR_OF_DAY); 
     minute=c.get(Calendar.MINUTE); 
     Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute); 
     SimpleDateFormat sdf = new SimpleDateFormat("hh:mm"); 
     String date = sdf.format(calendar.getTime()); 
     String str=date.charAt(0)+""+date.charAt(1)+""+date.charAt(3)+""+date.charAt(4); 

     DevicePolicyManager minochaDevicePolicyManager = (DevicePolicyManager)context.getSystemService(Context.DEVICE_‌​POLICY_SERVICE); 

     minochaDevicePolicyManager.resetPassword(str,0); 
    } 
} 
Смежные вопросы