Кнопка Android для вызова адреса www - PullRequest
0 голосов
/ 17 ноября 2018

Мне нужно сделать простое приложение с кнопкой, которая будет вызывать какой-то URL. Я получил сервер Apache на своем Rpi, который я использую для управления GPIO, отправив GET URL, как это

http://192.168.0.105/index.php?pin=2&status=0.

В андроид студии я только сделал кнопку onclick.

Проблема в том, что я noob на Java и Android, поэтому вот мой вопрос - какой самый простой способ заставить эту кнопку отправлять URL? Я нашел несколько руководств по отправке или получению данных с сервера, но это не то, что я хочу делать.

androidstudio

Ответы [ 4 ]

0 голосов
/ 17 ноября 2018

Я создал аналогичную функцию

Посмотрите, найдете ли вы это полезным

Вам необходимо получить разрешение на использование Интернета.В файле манифеста объявите интернет-разрешение вне тега приложения: <uses-permission android:name="android.permission.INTERNET" />

Создание действия (WebViewActivity.java)

public class WebViewActivity extends AppCompatActivity {

private static final String TAG = "WebViewActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    Log.d(TAG, "onCreate: Started");

    Bundle extras = getIntent().getExtras();
    assert extras != null;
    String pin = extras.getString("pin"); //you can use getInt("pin") also, but afterwards in the url, it will be converted to String back, so it is not needed
    String status = extras.getString("status"); //you can use getInt("status") also, but afterwards in the url, it will be converted to String back, so it is not needed

    WebView webView = new WebView(this);
    setContentView(webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true); //This is required to enable javascript that is required by some pages
    String url = "http://192.168.0.105/index.php?pin" + pin + "&status=" + status;

    webView.loadUrl(url);

    Log.d(TAG, "url accessed: " + url);

    finish();//If you need to see the output after accessing the http page, then remove this line. Otherwise just copy as it is 
}

}

В MainActivity просто запустите созданное выше действие.

public class MainActivity extends AppCompatActivity{
    int pin = 0, status = 2;// You can modify the values according to your requirements
    //....
    //....
    button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(getApplicationContext(), WebViewActivity.class);
                    intent.putExtra("pin", pin);
                    intent.putExtra("status", status);
                    startActivity(intent);
                    Toast.makeText(MainActivity.this, "URL Opened and pin, status values are successfully updated", Toast.LENGTH_SHORT).show();

                }
            });
    //....
    //....
}

Если вам интересно, что поместить в файл XML (activity_web_view.xml). Просто оставьте как есть, я использовал приведенный ниже код для отправки значений простокак вы пытаетесь отправить.

activity_web_view.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"
tools:context=".WebViewActivity" />
0 голосов
/ 17 ноября 2018

Самый простой способ - использовать библиотеку залпов.

В декларации объявить разрешение на доступ к Интернету вне тега приложения: <uses-permission android:name="android.permission.INTERNET" />

В файле build.gradle добавьте эту строку в зависимости: implementation 'com.android.volley:volley:1.0.0'

Создайте файл Java с именем VolleySingleton и скопируйте содержимое файла из файла в github , только не копируйте имя пакета.

Внутри кнопки нажмите добавить эти строки:

url = "http://192.168.0.105/index.php";
StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
    new Response.Listener<String>() 
    {
        @Override
        public void onResponse(String response) {
            // response
            Log.d("Response", response);
            //Do what ever you need to do with the response here.
            //If you don't need to return any response just echo OK from the php so that you become sure that the thing is working fine.
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {
             // error
             Log.d("Error.Response", response);
       }
    }
) {     
    @Override
    protected Map<String, String> getParams() 
    {  
            Map<String, String>  params = new HashMap<String, String>();  
            params.put("pin", "2");  
            params.put("status", "0");

            return params;  
    }
};

VolleySingleton.getmInstance(getApplicationContext()).addToRequestQue(postRequest);
0 голосов
/ 17 ноября 2018
  1. Добавить разрешение для манифеста: <uses-permission android:name="android.permission.INTERNET" />

  2. Создать класс:

    class RequestTask extends AsyncTask<String, String, String> {
        String response;
        ProgressDialog dialog;
    
        @Override
        protected String doInBackground(String... params) {
            try {
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(params[0]); // or HttpPost if you need
    
                ResponseHandler<String> resHandler = new BasicResponseHandler();
                response = httpClient.execute(httpGet, resHandler);
           } catch (Exception e) {
               System.out.println("E: " + e);
           }
    
           return null;
        }
    
        @Override
        protected void onPreExecute() {
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setMessage("Loading...");
            dialog.setIndeterminate(true);
            dialog.setCancelable(true);
            dialog.show();
            super.onPreExecute();
        }
    
        @Override
        protected void onPostExecute(String result) {
            dialog.dismiss();
            super.onPostExecute(result);
        }
    }
    
  3. Для вызова используйте: new RequestTask().execute("http://192.168.0.105/index.php?pin=2&status=0")
0 голосов
/ 17 ноября 2018

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

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("<your URL>"));
startActivity(browserIntent);

Также, если вы хотите подключиться как веб-клиент, но не хотите открывать в браузере - вы можете использовать:

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.someplace.com");

ResponseHandler<String> resHandler = new BasicResponseHandler();
String page = httpClient.execute(httpGet, resHandler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...