如何在Android中以编程方式打开3G移动数据?

use*_*267 4 android 3g-network

package com.testing.connection;

import android.app.Activity;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ConnectionActivity extends Activity implements OnClickListener{

    Button press;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        press = (Button)findViewById(R.id.button1);
        press.setOnClickListener(this);
    }

    public void onClick(View view){
        ConnectivityManager mgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);

        boolean is3G = mgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
        boolean isWifi = mgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

        if(isWifi){
            Toast.makeText(this, "WiFi connected...", Toast.LENGTH_LONG).show();
            sendMail();
        }
        else{
            //**Turn on Mobile Data
            //**Then sendMail()
            //**Turn off Mobile Data
        }
    }

    public void sendMail() throws MessagingException{

        String host = "smtp.gmail.com";
        String password = "abc123";
        String from = "testing@gmail.com";
        String toAddress = enterEmail.getText().toString();

        Properties properties = System.getProperties();
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtps.auth", true);
        properties.put("mail.smtp.starttls.enable", true);
        Session session = Session.getInstance(properties, null);

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO, toAddress);
        message.setSubject("Anti-Theft Attachment");

        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText("Your email address is saved as backup email in Anti-Theft Application");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);
        message.setContent(multipart);

        try{
            Transport transport = session.getTransport("smtps");
            transport.connect(host, from, password);
            transport.sendMessage(message, message.getAllRecipients());
            System.out.println("Mail Sent Successfully");
            transport.close();
        } catch (SendFailedException sfe){
            System.out.println(sfe);
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

嗨,我正在开发一个Android应用程序,我希望在检测到未连接到手机的Wifi时自动打开移动数据,因为我想确保无论是否发送电子邮件都可以发送Wifi是否连接......因此,一旦检测到wifi未连接,3G数据将打开,电子邮件将被发送出去,数据网络将关闭...

我可以知道如何开启3G网络并关闭3G网络??? 互联网上的来源很少,我希望有人能帮我解决它...谢谢......

Nav*_*een 11

希望这段代码可以帮到你,在我看来它很有用.

ConnectivityManager dataManager;
dataManager  = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
Method dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class);
dataMtd.setAccessible(true);
dataMtd.invoke(dataManager, true);        //True - to enable data connectivity .
Run Code Online (Sandbox Code Playgroud)

在清单中

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
Run Code Online (Sandbox Code Playgroud)

  • 在AndroidL中,setMobileDataEnabled API从ConnectivityManager中删除并移至TelephonyManager(setDataEnabled/getDataEnabled).此外,API受限制,只能由系统应用程序访问. (5认同)

Rej*_*eri 5

出于安全考虑,不允许您以编程方式打开移动网络。

您唯一可以做的就是通过显示设置来提示用户打开移动网络。

Intent intent=new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS);
ComponentName cn = new ComponentName("com.android.phone","com.android.phone.Settings");
intent.setComponent(cn);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

  • 支持这种想法,但是经理(主要来自测试背景,客户不尝试理解这些内容,因为其他一些应用程序也做到了) (3认同)