SELECT * FROM Vzakladke.net

Статьи об автоматизации и программировании


Отображение экрана смартфона Android на телевизоре (Дублирование экрана) своими руками

 

 

Не всегда легко отобразить экран мобильного устройства на смарт-телевизоре для просмотра фото, видео или сайтов можно с помощью специальной кнопки, если эта кнопка доступна. 
“Дублирование экрана” – это функция отображения экрана устройства, поддерживающего функцию Дублирование экрана (например, смартфона или компьютера), на телевизоре с помощью технологии Miracast. При использовании этой функции не требуется беспроводной маршрутизатор (или точка доступа).

На некоторых смартфонах эта кнопка недоступна по умолчанию для стриминга с планшета или смартфона на смарт-тв, но мы можем создать приложение, которое будет вызывать для нас эту настройку. Однако не везде это приложение может работать, так например на Sony Xperia приложение работает отлично, а на смартфоне Samsung с ОС Android 6 совсем не хочет работать. Кстати, на телефонах Asus эта кнопка есть в меню, поэтому это приложение и писать для Asus не нужно будет. Итак, давайте напишем приложение для наших исключительных случаев, например, для телевизоров Samsung.

 

 

Вначале создадим манифест и разрешим обращаться к сети вай-фай и интернету.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.asksql.doublescreen"
    android:installLocation="auto"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.setting.permission.ALLSHARE_CAST_SERVICE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:name="org.asksql.doublescreen.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

 

Далее  объявим переменные:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Double Screen</string>
    <string name="action_settings">Settings</string>
    <string name="menuClose">Close</string>
    <string name="action_website">Website</string>
</resources>

 

 Создадим стандартное меню:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
        android:id="@+id/action_website"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_website"/>    
    
    <item
        android:id="@+id/menuClose"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/menuClose"/>    

</menu>

 

Создадим главный класс MainActivity для работы приложения:

 

package org.asksql.doublescreen;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity    {

    public static final String ACTION_WIFI_DISPLAY_SETTINGS = "android.settings.WIFI_DISPLAY_SETTINGS";
    WifiManager wifi;
    private Button wifiDisplayBtn; 
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
        this.wifiDisplayBtn = (Button) findViewById(R.id.button1);
        // this.wifiDisplayBtn.setOnClickListener(this);
        this.wifi = (WifiManager) getSystemService("wifi");
        
        
        this.wifiDisplayBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
                	if (wifi.isWifiEnabled()) {
                		enablingWiFiDisplay();
                		return;
                	}				
				}
		}); 		
		
	
	}
	
	
    public void enablingWiFiDisplay() {
        try {
            startActivity(new Intent(ACTION_WIFI_DISPLAY_SETTINGS));
        } catch (ActivityNotFoundException e) {
            e.printStackTrace();
            try {
                startActivity(new Intent("com.samsung.wfd.LAUNCH_WFD_PICKER_DLG"));
            } catch (Exception e2) {
                try {
                    startActivity(new Intent("android.settings.CAST_SETTINGS"));
                } catch (Exception e3) {
                    Toast.makeText(getApplicationContext(), "Device not supported", 1).show();
                }
            }
        }
    }	

	///// MENU ========================================	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	    case R.id.menuClose:
	    	MainActivity.this.finish();
	    	System.exit(0);
	        return true;	        
	    case  R.id.action_website:
	        	String urlString="http://asksql.org";
	        	Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));
	        	intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	        	intent.setPackage("com.android.chrome");
	        	try {
	    	   		startActivity(intent);
	        	} catch (ActivityNotFoundException ex) {
	        	    // Chrome browser presumably not installed so allow user to choose instead
	        	    intent.setPackage(null);
	        	    startActivity(intent);
	        	}        	
	            return true;        	
	    default:        
	    	return super.onOptionsItemSelected(item);
	    }	        
	    
	} 
	
}

 

Вот и все, программа готова, скачать ее можете здесь: https://asksql.org//application/uploads/DoubleScreen.apk

Дата публикации: 2017-04-30 11:04:50

Android

0

Отзывы:

А так
public void enablingWiFiDisplay() { try { startActivity(new Intent("android.settings.WIFI_DISPLAY_SETTINGS")); return; } catch (ActivityNotFoundException activitynotfoundexception) { activitynotfoundexception.printStackTrace(); } try { startActivity(new Intent("android.settings.CAST_SETTINGS")); return; } catch (Exception exception1) { Toast.makeText(getApplicationContext(), "Device not supported", Toast.LENGTH_LONG).show(); } }

Ваше имя:

Ваш e-mail (необязательно):

Сообщение:

Captcha