Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Agassy
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 5
#1

Как запустить метод в Activity из BroadcastReceiver - Программирование Android

03.10.2014, 16:16. Просмотров 1249. Ответов 2
Метки нет (Все метки)

Здравствуйте!!!
Все до банальности просто и повторяется, по кругу
Новичок, увлекся Java & Android...
Пытаюсь изобразить приложения первого этапа - при вхождения в сектор, центр которого определен географическими координатами и имеет определенный радиус, срабатывает оповещение и уменьшается счетчик, в соответствии с временем нахождения в секторе.

Оповещение срабатывает, счетчик не как не запускается...
Помогите, пожалуйста преодолеть барьерчик!

MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class ProximityAlertActivity extends Activity {
    private static final long POINT_RADIUS = 50;               // in Meters
    private static final long PROX_ALERT_EXPIRATION = -1; // It will never expire
    private static final String PROX_ALERT_INTENT = "com.androidmyway.demo.ProximityAlert";
    private LocationManager locationManager;
    private EditText latitudeEditText;
    private EditText longitudeEditText;
    private Button addAlertButton;
    
    TextView tvtextCounterLive;
    
    double counterLive = 100.00;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_proxymity);
 
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            tvtextCounterLive = (TextView) findViewById(R.id.textCounterLive);
            latitudeEditText = (EditText) findViewById(R.id.point_latitude);
            longitudeEditText = (EditText) findViewById(R.id.point_longitude);
            addAlertButton = (Button) findViewById(R.id.add_alert_button);
 
            addAlertButton.setOnClickListener(new OnClickListener() {
                  public void onClick(View v) {
                      
                      addProximityAlert();
                  }
            });
 
    }    
 
 // запускаем таймер и изменение счетчика жизни 
    public void startTimer(){
        Timer myTimer = new Timer();
        myTimer.schedule(new TimerTask() {
 
    @Override
    public void run() {
        ProximityAlertActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                counterLive-=0.15;
                tvtextCounterLive.setText(" " + String.format("%1$.2f", counterLive) + "%");
            }
        });
    }
}, 0, 2500);
    }
    
 // останавливаем таймер и изменение счетчика жизни
 //   public void stopTimer(){ } 
 
    
    public void showCounterLive(){
        tvtextCounterLive.setText(" " + counterLive + "%");
}
    
    
    private void addProximityAlert() {
           double latitude = Double.parseDouble(latitudeEditText.getText().toString());
           double longitude = Double.parseDouble(longitudeEditText.getText().toString());
           Log.d(getClass().getSimpleName(),"latitude = "+latitude);
           Log.d(getClass().getSimpleName(),"longitude= "+longitude);
           Intent intent = new Intent(PROX_ALERT_INTENT);
           PendingIntent proximityIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
           locationManager.addProximityAlert(
                  latitude,                          // the latitude of the central point of the alert region
                  longitude,                        // the longitude of the central point of the alert region
                  POINT_RADIUS,                // the radius of the central point of the alert region, in meters
                  PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no  expiration
                  proximityIntent                // will be used to generate an Intent to fire when entry to or exit from the alert region is detected
           );
 
           IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
           registerReceiver(new ProximityIntentReceiver(), filter);
           Toast.makeText(getApplicationContext(),"Точка добавлена!",Toast.LENGTH_SHORT).show();
    }     
}
BroadcastReceier
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class ProximityIntentReceiver extends BroadcastReceiver {
       private static final int NOTIFICATION_ID = 1000;
       
       
       @SuppressWarnings("deprecation")
       @Override
       public void onReceive(Context context, Intent intent) {
 
           String key = LocationManager.KEY_PROXIMITY_ENTERING;
        
           Boolean entering = intent.getBooleanExtra(key, false);
           if (entering) {
                       Toast.makeText(context, "Вошли в сектор!", Toast.LENGTH_LONG).show();
              }else {
                       Toast.makeText(context, "Вышли из сектора!", Toast.LENGTH_LONG).show();
              }
              NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
 
              Intent notificationIntent = new Intent(context, ProximityAlertActivity.class);
              PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
              Notification notification = createNotification();
              notification.setLatestEventInfo(context, "Вошли в ZONE51", "You are near your point of interest.", pendingIntent);
 
              notificationManager.notify(NOTIFICATION_ID, notification);
      }
 
 
    private Notification createNotification() {
              Notification notification = new Notification();
              notification.icon = R.drawable.ic_launcher;
              notification.when = System.currentTimeMillis();
              notification.defaults |= Notification.DEFAULT_VIBRATE;
 
              return notification;
        }
}
Пробовал работать разные варианты "в лоб" - не заработало
Java
1
2
3
4
5
6
7
8
9
10
11
           Boolean entering = intent.getBooleanExtra(key, false);
           if (entering) {
 
                     Toast.makeText(context, "Вошли в сектор!", Toast.LENGTH_LONG).show();
                  //Вариант I   
                          //startTimer();
                  //Вариант II
                          // ProximityAlertActivity on = new ProximityAlertActivity ();
                          // startTimer.on();
                                 
              }
Пока читаю инет...если не сложно намекните, куда копать, первый раз с BroadcastReceiver Имею дело ...

Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2014, 16:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как запустить метод в Activity из BroadcastReceiver (Программирование Android):

Servise, BroadcastReceiver, Activity
Здравствуйте, есть сервис и активити, сервис возвращает данные активити через...

Из одной Activity запустить функцию другой Activity
например есть Activity2 которое я показываю в Dialog окошке, там у меня...

Как запустить activity внутри фрагмента
Как запустить activity внутри фрагмента?

Как при старте приложения запустить другой Activity ?
Всем привет, ребят подскажите, как при запуске поменять первую запускаемую...

Как запустить Activity через am start из программы Android?
Всем привет. Подскажите как запустить активность через am start из программы...

Подскажите как запустить через Inten Activity другого приложения
Добрый день! весь смысл такой я могу просто запустить другое приложение,...

2
Agassy
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 5
07.10.2014, 13:51  [ТС] #2
Попробовал внедрить static ..

MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
...
    private static EditText latitudeEditText;
    private EditText longitudeEditText;
    private Button addAlertButton;
    
    public static TextView tvtextCounterLive;
    public static double counterLive = 100.00;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_proxymity);
BroadcastReceiver
Java
1
2
3
4
5
6
7
8
    ....       
       Boolean entering = intent.getBooleanExtra(key, false);
           if (entering) {
                    // Log.d(getClass().getSimpleName(), "entering");
                     Toast.makeText(context, "Вошли в сектор!", Toast.LENGTH_LONG).show();
                    ProximityAlertActivity.startTimer();
                                 
              }else {....
получил следующий результат:
Код
10-07 09:27:08.115: W/dalvikvm(774): threadid=11: thread exiting with uncaught exception (group=0x40a13300)
10-07 09:27:08.394: E/AndroidRuntime(774): FATAL EXCEPTION: Timer-0
10-07 09:27:08.394: E/AndroidRuntime(774): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4609)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:867)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.view.ViewGroup.invalidateChild(ViewGroup.java:4066)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.view.View.invalidate(View.java:10250)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.view.View.invalidate(View.java:10205)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.widget.TextView.checkForRelayout(TextView.java:6296)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.widget.TextView.setText(TextView.java:3547)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.widget.TextView.setText(TextView.java:3405)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at android.widget.TextView.setText(TextView.java:3380)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at com.androidmyway.demo.proxymityalert.ProximityAlertActivity$2.run(ProximityAlertActivity.java:72)
10-07 09:27:08.394: E/AndroidRuntime(774): 	at java.util.Timer$TimerImpl.run(Timer.java:284)
10-07 09:27:09.525: D/dalvikvm(774): GC_CONCURRENT freed 141K, 3% free 8268K/8519K, paused 329ms+121ms, total 1080ms
10-07 09:27:11.315: E/ActivityThread(774): Activity com.androidmyway.demo.proxymityalert.ProximityAlertActivity has leaked IntentReceiver com.androidmyway.demo.proxymityalert.ProximityIntentReceiver@4122ff70 that was originally registered here. Are you missing a call to unregisterReceiver()?
10-07 09:27:11.315: E/ActivityThread(774): android.app.IntentReceiverLeaked: Activity com.androidmyway.demo.proxymityalert.ProximityAlertActivity has leaked IntentReceiver com.androidmyway.demo.proxymityalert.ProximityIntentReceiver@4122ff70 that was originally registered here. Are you missing a call to unregisterReceiver()?
10-07 09:27:11.315: E/ActivityThread(774): 	at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:792)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1111)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.app.ContextImpl.registerReceiver(ContextImpl.java:1098)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.app.ContextImpl.registerReceiver(ContextImpl.java:1092)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:365)
10-07 09:27:11.315: E/ActivityThread(774): 	at com.androidmyway.demo.proxymityalert.ProximityAlertActivity.addProximityAlert(ProximityAlertActivity.java:135)
10-07 09:27:11.315: E/ActivityThread(774): 	at com.androidmyway.demo.proxymityalert.ProximityAlertActivity.access$0(ProximityAlertActivity.java:119)
10-07 09:27:11.315: E/ActivityThread(774): 	at com.androidmyway.demo.proxymityalert.ProximityAlertActivity$1.onClick(ProximityAlertActivity.java:55)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.view.View.performClick(View.java:4084)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.view.View$PerformClick.run(View.java:16966)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.os.Handler.handleCallback(Handler.java:615)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.os.Handler.dispatchMessage(Handler.java:92)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.os.Looper.loop(Looper.java:137)
10-07 09:27:11.315: E/ActivityThread(774): 	at android.app.ActivityThread.main(ActivityThread.java:4745)
10-07 09:27:11.315: E/ActivityThread(774): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-07 09:27:11.315: E/ActivityThread(774): 	at java.lang.reflect.Method.invoke(Method.java:511)
10-07 09:27:11.315: E/ActivityThread(774): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-07 09:27:11.315: E/ActivityThread(774): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-07 09:27:11.315: E/ActivityThread(774): 	at dalvik.system.NativeStart.main(Native Method)
10-07 09:27:17.275: I/Process(774): Sending signal. PID: 774 SIG: 9
Не подскажете, что сделал не так? и куда копать далее..
Заранее благодарен!
0
Agassy
0 / 0 / 0
Регистрация: 03.10.2014
Сообщений: 5
09.10.2014, 17:45  [ТС] #3
Подскажите, пожалуйста, какие-нибудь "живые" форумы, по разработке приложений под Android.

Заранее благодарен!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2014, 17:45
Привет! Вот еще темы с решениями:

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в...

Как добавить cardview в activity с другой activity?
У меня есть активность(1), куда нужно добавить cardview. в этой же активности...

Как в Navigation Drawer Activity засунуть Activity?
Здравствуйте! у меня такая проблема navigation drawer activity работает только...

Как запустить метод из Service?
При запуске сервиса в onCreate запускается метод, когда он отрабатывает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru