• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Android - Używanie komponentów w innych klasach

0 głosów
718 wizyt
pytanie zadane 15 sierpnia 2016 w Java przez R[a]=d(ek); Mądrala (6,370 p.)

Witam, 

Chcę napisać prostą aplikację, która będzie ładowała konkretną stronę po otrzymaniu konkretnej treści. 

np. Otrzymam sms'a o treści "siemanko" to w komponencie WebView będzie się ładowała strona google

 

Mam dodane odpowiednie pozwolenia w "Manifeście" i zarejestrowaną osobną klasę, która ma za zadanie obsłużyć "przeczytanie sms'a "

PLIK: AndroidManifest.xml

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

    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <receiver android:name=".DriverSmsReader" android:enabled="true">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </receiver>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

 

Plik: DriverSmsReader.java

package mojpakiet.....;

import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;

import android.content.Intent;

import android.os.Bundle;
import android.telephony.SmsMessage;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.webkit.WebView;



/**
 * Created by Radosław on 2016-08-13.
 */
public class DriverSmsReader extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent arg1)
    {

        Bundle bundle = arg1.getExtras();
        SmsMessage[] msgs=null;
        String wiadomosc="";
        Object[] pdus =(Object[])bundle.get("pdus");
        msgs=new SmsMessage[pdus.length];

        for(int x=0;x<msgs.length;x++)
        {
            SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdus[x]);
            String phoneNumber = currentMessage.getDisplayOriginatingAddress();
            String message = currentMessage.getDisplayMessageBody();

            switch (message.toLowerCase().toString().trim())
            {
                case "siemanko":
                    Toast.makeText(context, message + " -- CZYTANIE SMS DZIAŁA [OD:: "+ phoneNumber + " ]", Toast.LENGTH_LONG).show();

                    /*
                    *  Tutaj chcę użyć WebView
                    *   i wyświetlić jakąś stronę w ekranie głównym 
                    * */

                    break;
            }


        }
    }
}

 

PLIK:  MainActivity.java

package mojpakiet...... .;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

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

        /* tutaj jak użyje WebView to działa - strona sie ładuje.. 
          WebView webView = (WebView) findViewById(R.id.webView);
          webView.getSettings().getJavaScriptEnabled();
          webView.loadUrl("ADRES DO ZALADOWANIA");
        */

    }
}

 

PLIK: activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="mojpakiet,......MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nazwa apki"
        android:id="@+id/textView" />

    <WebView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/webView"
        android:layout_below="@+id/textView"
        android:layout_alignParentStart="true"
        android:layout_marginTop="52dp"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

 

 

Co muszę zrobić aby móc korzystać bez problemu z komponentu WebView w tej klasie (DriverSmsReader)? 

Z góry dzięki za pomoc. 


 

1 odpowiedź

+1 głos
odpowiedź 15 sierpnia 2016 przez KubenQPL Maniak (62,840 p.)
wybrane 16 sierpnia 2016 przez R[a]=d(ek);
 
Najlepsza
BroadcastReceiver nie może mieć WebView ani innej klasy dziedziczącej z view ponieważ on jest w tle, on odpowiada tylko za service
komentarz 16 sierpnia 2016 przez R[a]=d(ek); Mądrala (6,370 p.)

Bardzo dziękuję za objaśnienie. 

Rozwiązałem mój problem w taki sposób, że bezpośrednio w Głównej aktywności (public class MainActivity extends AppCompatActivity {...})

stworzyłem obiekt 

BroadcastReceiver broadcast = new BroadcastReceiver() {... }

z metodą

onReceive(Context context, Intent intent) 

i w tej metodzie reaguje na nadejście sms'a  ale jeszcze przed tym dodałem IntentFilter na odebrane sms'y 

 

private IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

 

Pozdrawiam i jeszcze raz dziękuję za konkretne objaśnienie. 

Podobne pytania

–1 głos
2 odpowiedzi 790 wizyt
pytanie zadane 21 września 2019 w Android, Swift, Symbian przez serdaw Użytkownik (740 p.)
+1 głos
1 odpowiedź 952 wizyt
pytanie zadane 6 grudnia 2018 w Java przez kvbq Obywatel (1,490 p.)
0 głosów
1 odpowiedź 1,576 wizyt
pytanie zadane 11 września 2015 w C# przez Ceki Mądrala (5,310 p.)

93,427 zapytań

142,421 odpowiedzi

322,648 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...