Android开发中的一些小知识点记录(21-40)

编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/70953767


Android开发中的一些小知识点记录 (1-20) (41-60)

21,从一个App中打开手机中安装的某个应用程序

这里写图片描述

import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private PackageManager mPackageManager;
    private Context mContext = MainActivity.this;
    private List<ApplicationInfo> mListAppcations;
    private Intent mIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取手机中所有应用程序的包名的准备工作
        mPackageManager = getPackageManager();
        mIntent = new Intent(Intent.ACTION_MAIN,null);
        mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        mListAppcations = mPackageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
        Collections.sort(mListAppcations,new ApplicationInfo.DisplayNameComparator(mPackageManager));
    }
	
	// 启动一个Apk的Button点击事件
    public void launchApk(View view){
        // 获取手机中所有应用程序的包名
        for (ApplicationInfo info : mListAppcations){
            Log.e(TAG, "getPackagename: ---"+ info.packageName );
            // 匹配QQ的包名 如果手机中安装了QQ
            if(info.packageName.equals("com.tencent.mobileqq")){
                // 就打开该应用程序
                Intent resolveIntent = mPackageManager.getLaunchIntentForPackage(info.packageName);
                mContext.startActivity(resolveIntent);
            }
        }
    }
}

22,用代码检测android设备是否root或是否获取root权限

//(activity)MainActivity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import java.io.DataOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

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

    private void doSU() {
        try {
            // 这里执行是系统已经开放了root权限,而不是说通过执行这句来获得root权限
            Process process = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(process.getOutputStream());
            // os.writeBytes("ifconfig eth0 192.168.18.122\n");
            os.writeBytes("exit\n");
            os.flush();
            // 如果已经root,但是用户选择拒绝授权,e.getMessage() = write failed: EPIPE (Broken pipe)
            // 如果没有root,e.getMessage()= Error running exec(). Command: [su] Working Directory: null Environment: null
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.checkRoot:
                doSU();
                break;

            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}
----------------------------------------------------------------------------------------
//(app->src->main->res->menu)main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/checkRoot"
        android:showAsAction="never"
        android:title="CheckRoot"/>
</menu>

23,SpannableString实现一个TextView显示多种不同的文字大小和颜色

这里写图片描述

//MainActivity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.TextAppearanceSpan;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView) findViewById(R.id.textView);
        SpannableString styledText = new SpannableString("赶紧洗洗睡");
        styledText.setSpan(new TextAppearanceSpan(this, R.style.style0), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        styledText.setSpan(new TextAppearanceSpan(this, R.style.style1), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        styledText.setSpan(new TextAppearanceSpan(this, R.style.style2), 2, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        styledText.setSpan(new TextAppearanceSpan(this, R.style.style3), 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        styledText.setSpan(new TextAppearanceSpan(this, R.style.style4), 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mTextView.setText(styledText, TextView.BufferType.SPANNABLE);
    }
}
-------------------------------------------------------------------
//(app->src->main->res->values)styles
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="style0">
        <item name="android:textSize">40sp</item>
        <item name="android:textColor">#00ff00</item>
    </style>
    <style name="style1">
        <item name="android:textSize">35sp</item>
        <item name="android:textColor">@color/colorAccent</item>
    </style>
    <style name="style2">
        <item name="android:textSize">30sp</item>
        <item name="android:textColor">#ffff00</item>
    </style>
    <style name="style3">
        <item name="android:textSize">25sp</item>
        <item name="android:textColor">#00ffff</item>
    </style>
    <style name="style4">
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#ff00ff</item>
    </style>
</resources>

24,Html.fromHtml(html)加载到TextView中的使用

这里写图片描述

// MainActivity
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;
import java.io.InputStream;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private TextView mTextView1;
    private TextView mTextView2;
    private TextView mTextView3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }
    private void initView(){
        mTextView1 = (TextView) findViewById(R.id.textView1);
        mTextView2 = (TextView) findViewById(R.id.textView2);
        mTextView3 = (TextView) findViewById(R.id.textView3);
    }
    private void initData(){
        // 调用严苛模式
        struct();
        // 用Html语法写成的显示内容
        String html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>TextView使用HTML</strong></p><p><em>TextView使用HTML</em></p>"
                + "<p><a href=\"http://www.baidu.com/\">百度</a>一键打开百度</p><p><font color=\"#aabb00\">颜色1</p>"
                + "<p><font color=\"#00bbaa\">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6>"
                + "网络图片</p><img src=\"http://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/></body></html>";
		// TextView显示滚动条
        mTextView1.setScrollbarFadingEnabled(false);
        // 给TextView设置可滚动
        mTextView1.setMovementMethod(ScrollingMovementMethod.getInstance());
        // 给TextView设置超链接可以打开网页
        mTextView1.setMovementMethod(LinkMovementMethod.getInstance());
        Spanned spanned = Html.fromHtml(html, new Html.ImageGetter() {
            @Override
            public Drawable getDrawable(String source) {
                InputStream is = null;
                Drawable drawable = null;
                try{
                    URL url = new URL(source);
                    is = (InputStream) url.getContent();
                    // 在主线程中访问网络
                    drawable = Drawable.createFromStream(is, null);
//                    drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicWidth());
                    drawable.setBounds(0,0,200,200);
                    is.close();
                }catch (Exception e){
                    e.printStackTrace();
                    return null;
                }
                return drawable;
            }
        }, null);
        mTextView1.setText(spanned);

        String textStr1 = "本月已充值 <font color=\"#FF0000\">" + 100 + "</font>元";
        String textStr2 = "已充值 <font color=\"#FF0000\">" + 300 + "</font>元";
        // 没有拼接,颜色显示正确
        mTextView2.setText(Html.fromHtml(textStr1));
        // 拼接过后,颜色效果消失
        mTextView3.setText("本月" + Html.fromHtml(textStr2));
    }
    /**
     * 报告与线程及虚拟机相关的策略违例。一旦检测到策略违例(policy violation),
     * 你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。你可以强制用警告代替崩溃(crash),
     * 也可以仅将警告计入日志,让你的应用继续执行
     */
    public static void struct() {
        // 严苛模式的线程策略
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()
                .penaltyLog()
                .build());
        // 严苛模式的虚拟机策略
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
		        // 探测SQLite数据库操作
                .detectLeakedSqlLiteObjects() 
                // 打印logcat
                .penaltyLog() 
                .penaltyDeath()
                .build());
    }
}
----------------------------------------------------------------------------------------
// (layout)activity_main
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:paddingLeft="10dp"
    android:orientation="vertical"
    tools:context="com.test.fromhtmldemo.MainActivity">

    <TextView
        android:scrollbars="vertical"
        android:scrollbarThumbVertical="@color/colorAccent"
        android:scrollbarSize="3dp"
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""/>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

  添加权限:

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

25,TextView设置超链接

这里写图片描述

//MainActivity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView mTv1;
    private TextView mTv2;
    private TextView mTv3;
    private TextView mTv4;
    private TextView mTv5;

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

    private void initView(){
        //(方法一)用autoLink="all"自动识别
        mTv1 = (TextView) findViewById(R.id.tv1);
        //(方法二)将显示内容写到String.xml中
        mTv2 = (TextView) findViewById(R.id.tv2);
        //(方法三)用Html类的fromHtml()方法
        mTv3 = (TextView) findViewById(R.id.tv3);
        //(方法四)用Spannable或实现它的类
        mTv4 = (TextView) findViewById(R.id.tv4);
        //(方法五)用Spannable或实现它的类,去掉超链接下划线
        mTv5 = (TextView) findViewById(R.id.tv5);
    }

    private void initData(){
        mTv1.setText("(1_1)百度:http://www.baidu.com/");
        //激活链接
        mTv2.setMovementMethod(LinkMovementMethod.getInstance());

        String html =  "(1_3)百度:<a href='http://www.baidu.com'>进入百度</a>";
        mTv3.setText(Html.fromHtml(html));
        //激活链接
        mTv3.setMovementMethod(LinkMovementMethod.getInstance());

        SpannableString ss1 = new SpannableString("(1_4)百度:进入百度");
        //设置8~12为网站链接
        ss1.setSpan(new URLSpan("http://www.baidu.com"), 8, 12,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mTv4.setText(ss1);
        //激活链接
        mTv4.setMovementMethod(LinkMovementMethod.getInstance());

        SpannableString ss2 = new SpannableString("(1_5)百度:进入百度");
        //设置8~12为网站链接
        ss2.setSpan(new URLSpanNoUnderline("http://www.baidu.com"), 8, 12,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mTv5.setText(ss2);
        //激活链接
        mTv5.setMovementMethod(LinkMovementMethod.getInstance());
    }
}
----------------------------------------------------------------------------------------
//URLSpanNoUnderline
import android.graphics.Color;
import android.text.TextPaint;
import android.text.style.URLSpan;

/**
 * 去掉下划线的超链接
 */
public class URLSpanNoUnderline extends URLSpan{
    public URLSpanNoUnderline(String url) {
        super(url);
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        //无下划线
        ds.setUnderlineText(false);
        //字体颜色
        ds.setColor(Color.parseColor("#646464"));
    }
}
----------------------------------------------------------------------------------------
//(layout)activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <!--用autoLink="all"设置普通文本-->
    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:autoLink="all"/>

    <!--将显示内容写到String.xml中-->
    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="@string/tv2"/>

    <!--用Html类的fromHtml()方法-->
    <TextView
        android:id="@+id/tv3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"/>

    <!--用Spannable或实现它的类-->
    <TextView
        android:id="@+id/tv4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"/>

    <!--用Spannable或实现它的类去掉超链接下划线-->
    <TextView
        android:id="@+id/tv5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"/>
</LinearLayout>
----------------------------------------------------------------------------------------
//(values)Strings
<resources>
    <string name="app_name">TextView</string>
    <string name="tv2">(1_2)百度:<a href="http://www.baidu.com">进入百度</a> </string>
</resources>

26,android设备获取WIFIMac地址方式

  官方解释:
  为了给用户更多的数据保护,Android6.0之后移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符,用WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都返回 02:00:00:00:00:00。
  Android6.0之前获取方法:

// 添加权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

// 返回的字符串就是设备的Mac地址
private String getWIFIMac() {
	WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
	WifiInfo infor = manager.getConnectionInfo();
	return infor.getMacAddress();
}

  Android6.0以后获取方法:

// 添加权限
<uses-permission android:name="android.permission.INTERNET"/>

// 返回的字符串就是设备的Mac地址
public static String macAddress() throws SocketException {
    String address = null;
    // 把当前机器上的访问网络接口的存入 Enumeration集合中
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    Log.d("TEST_BUG", " interfaceName = " + interfaces );
    while (interfaces.hasMoreElements()) {
        NetworkInterface netWork = interfaces.nextElement();
        // 如果存在硬件地址并可以使用给定的当前权限访问,则返回该硬件地址(通常是 MAC)。
        byte[] by = netWork.getHardwareAddress();
        if (by == null || by.length == 0) {
            continue;
        }
        StringBuilder builder = new StringBuilder();
        for (byte b : by) {
            builder.append(String.format("%02X:", b));
        }
        if (builder.length() > 0) {
            builder.deleteCharAt(builder.length() - 1);
        }
        String mac = builder.toString();
        Log.d("TEST_BUG", "interfaceName="+netWork.getName()+", mac="+mac);
        // 从路由器上在线设备的MAC地址列表,可以印证设备Wifi的 name 是 wlan0
        if (netWork.getName().equals("wlan0")) {
            Log.d("TEST_BUG", " interfaceName ="+netWork.getName()+", mac="+mac);
            address = mac;
        }
    }
    return address;
}

  Wifi未打开得到的是:02:00:00:00:00:00
  android屏获取EthernetMac地址方式:

private String getMacAddr(){
    String procVersionStr;
    try {
        BufferedReader reader = new BufferedReader(new FileReader("/sys/class/net/eth0/address"), 256);
        try {
            procVersionStr = reader.readLine();
        } finally {
            reader.close();
        }
    } catch (IOException e) {
        Log.e("", "IO Exception when getting irnumber", e);
        return "";
    }
    return procVersionStr;
}

27,Mediaplayer获取数据播放的三种方式

// 从资源文件中获取
MediaPlayer player = new MediaPlayer.create(this,R.raw.test);
player.stare()
// 从文件系统中获取
private String externalPath = Environment.getExternalStorageDirectory() + "/Movies/a.mp4";
MediaPlayer player = new MediaPlayer();
player.setDataSource(externalPath);
player.prepare();
player.start();
// 从网络中获取
private String netPath = "http://xxx.mp4";
MediaPlayer player = new MediaPlayer();
player.setDataSource(externalPath);
player.prepare();
player.start();

28,去除ListView和RecyclerView边界阴影效果和滚动条

android:overScrollMode="never"
android:scrollbars="none"

29,Android获取设备IMEI、设备型号、SDK版本和系统版本

// 获取设备IMEI
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String IMEIs = tm.getDeviceId() ;
// 设备型号
String device_model = Build.MODEL; 
// 设备SDK版本
String version_sdk = Build.VERSION.SDK;   
// 设备系统版本
String version_release = Build.VERSION.RELEASE; 

30,Android获取设备IP地址

// 获取设备的WifiIp地址,Wifi未打开获取为0.0.0.0
private String getWifiIP() {
	WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
	//判断wifi是否开启
	if (!wifiManager.isWifiEnabled()) {
	    wifiManager.setWifiEnabled(true);
	}
	WifiInfo wifiInfo = wifiManager.getConnectionInfo();
	int ipAddress = wifiInfo.getIpAddress();
	String wifiIP = intToIp(ipAddress);
	return wifiIP;
}
private String intToIp(int i) {
	return (i & 0xFF ) + "." +
	((i >> 8 ) & 0xFF) + "." +
	((i >> 16 ) & 0xFF) + "." +
	( i >> 24 & 0xFF) ;
}

// 获取当前连接的网络的IP地址,包括Wifi网络和有线网络
private String getIPAddr() {
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface
                .getNetworkInterfaces(); en.hasMoreElements(); ) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf
                    .getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()
                        && inetAddress instanceof Inet4Address) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException ex) {
        ex.printStackTrace();
    }
    return "0.0.0.0";
}

31,Android通过程序创建桌面快捷方式,可以指定快捷方式的网址

  程序卸载快捷方式不会消失,如果存在快捷方式不会重复创建

// 添加权限
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
// activity代码
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.baidu);
        addShortcut(icon,"百度",Uri.parse("https://www.baidu.com/"));
    }

    public void addShortcut(Parcelable icon, String name, Uri uri) {
        Intent intentAddShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
        intentAddShortcut.putExtra("duplicate", false);
        // 添加名称
        intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
        // 添加图标
        intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
        // 设置Launcher的Uri数据
        Intent intentLauncher = new Intent();
        intentLauncher.setData(uri);
        // 添加快捷方式的启动方法
        intentAddShortcut
                .putExtra(Intent.EXTRA_SHORTCUT_INTENT, intentLauncher);
        sendBroadcast(intentAddShortcut);
    }
}

32,将文字显示在图片上,通过margin等于负值的方式实现

<ImageView
    android:src="@mipmap/baidu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY"
    android:id="@+id/imageView"/>

<TextView
    android:layout_marginTop="-100dp"
    android:layout_below="@+id/imageView"
    android:layout_centerHorizontal="true"
    android:text="手机百度"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

33,实现界面不被弹出的键盘挤上去

//在AndroidMainfest.xml文件中对应的Activity添加
android:windowSoftInputMode="adjustPan" 

34,Android开发中mipmap和drawable中文件的分辨率

// mipmap文件夹中icon的尺寸
mipmap-mdpi/icon.png (48x48 px  160DPI)
mipmap-hdpi/icon.png (72x72 px  240DPI)
mipmap-xhdpi/icon.png (96x96 px  320DPI)
mipmap-xxhdpi/icon.png (144x144 px  480DPI)
mipmap-xxxhdpi/icon.png (192x192 px  640DPI)
// drawable文件夹切图标准
drawable-mdpi (480×320 px) 
drawable-hdpi (800×480 px)
drawable-xhdpi (1280×720 px)
drawable-xxhdpi (1920×1080 px)
drawable-xxxhdpi (3840×2160 px)
1x : 1.5x : 2x : 3x : 4x

35,Android中如何升级Gradle

从 https://services.gradle.org/versions/all 网站中获取最新的Gradle的版本号:
这里写图片描述

  可以发现最新的稳定版本是3.5,于是用编辑器随意打开一个项目gradle\wrapper里面的gradle-wrapper.properties文件,找到distributionUrl这一行,将里面的版本替换为3.5,然后编译运行,AS就会开始下载,下载完后重启AS,就可以使用最新的Gradle了

36,获取Android屏幕的实际分辨率

public static Point getScreenResolution(Context context) {
	WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
	DisplayMetrics dm = new DisplayMetrics();
	wm.getDefaultDisplay().getMetrics(dm);
	Point size = new Point();
	size.x = dm.widthPixels;
	size.y = dm.heightPixels;
	return size;
}

  或者:

public static Display getWindowDisplay(){
    WindowManager windowManager = ((Activity) mContext).getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    return display;
}

37,点击某个键实现Home键效果

/**点击F1相当于点击Home键*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
	if (keyCode == KeyEvent.KEYCODE_F1) {
	    Intent intent = new Intent(Intent.ACTION_MAIN);
	    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	    intent.addCategory(Intent.CATEGORY_HOME);
	    startActivity(intent);
	    return true;
	}
	return super.onKeyDown(keyCode, event);
}

38,获取物理按键的KeyCode值

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    while(true){
        Log.i(TAG , "keyCode:" + keyCode);
        return super.onKeyDown(keyCode, event);
    }
}

  附:欧阳鹏 我的Android进阶之旅------>Android KeyCode列表

39,颜色透明度对应表

透明度  十六进制
00%   FF(不透明)
5%    F2
10%   E5
15%   D8
20%   CC
25%   BF
30%   B2
35%   A5
40%   99
45%   8c
50%   7F
55%   72
60%   66
65%   59
70%   4c
75%   3F
80%   33
85%   21
90%   19
95%   0c
100%   00(全透明)
如: #FFFFFFFF 不透明白色
   #00FFFFFF 全透明白色
40,Android版本和API Level对应表

这里写图片描述
Android版本和API Level对应表下载请移步:http://download.csdn.net/detail/zxc514257857/9867553

Android开发中的一些小知识点记录 (1-20) (41-60)


----------因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!----------

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了满足广大Android开发爱好者与从业者的学习需求,我们精心整理并上传了一份全面而实用的Android项目资源包。这份资源包内容丰富,涵盖了从基础知识到实战应用的全方位内容,旨在为开发者们提供一个便捷、高效的学习平台。 一、文件手册 资源包的文件手册部分,详细记录Android开发的核心知识点和常用技术。无论是初学者还是有一定经验的开发者,都能从找到所需的学习资料。手册采用了简洁明了的排版方式,使得查阅更加方便快捷。同时,手册内容深入浅出,既适合新手入门,也能为老手提供有价值的参考。 二、项目实战与练习 为了让学习者能够将理论知识与实践相结合,我们特别准备了项目实战与练习部分。这部分内容包含了多个精心设计的Android项目案例,从需求分析、设计思路到实现过程,都有详细的讲解和代码示例。学习者可以通过实际操作,深入了解Android开发的整个流程,提升自己的实战能力。 此外,我们还提供了一系列练习题,旨在巩固所学知识,检验学习成果。这些练习题既有基础题,也有难度较高的挑战题,适合不同层次的学习者进行练习。 三、Android开发工具集 在Android开发过程,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效地进行Android开发工作。 总的来说,这份Android项目资源包是一份不可多得的学习资料,无论你是初学者还是有一定经验的开发者,都能从受益匪浅。我们希望通过这份资源包,为广大Android开发爱好者与从业者提供一个更加便捷、高效的学习平台,共同推动Android开发领域的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamBackTo

感谢各位金主大大(* _ *)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值