精华内容
下载资源
问答
  • ImmersionBar -- android 4.4以上沉浸式实现 直接看效果图,最下面有各个版本的效果图 使用 android studio compile 'com.gyf.barlibrary:barlibrary:2.2.7' eclipse barlibrary-2.2.7.jar 版本说明 点我 ...
  • **代码如下,用4.4以下的版本能插入,4.4以上的不行,需要做些什么,请大神们帮助,不禁感谢!** _**manifest文件:**_ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=...
  • package com.jiayinlending.util; import android.annotation.SuppressLint; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; imp



    package com.jiayinlending.util;
    
    import android.annotation.SuppressLint;
    import android.content.ContentUris;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Environment;
    import android.provider.DocumentsContract;
    import android.provider.MediaStore;
    
    
    public class GetUriPathUtils {
    
     
        @SuppressLint("NewApi")
        public static String getPathByUri4kitkat(final Context context, final Uri uri) {
            final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
            // DocumentProvider
            if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
                if (isExternalStorageDocument(uri)) {// ExternalStorageProvider
                    final String docId = DocumentsContract.getDocumentId(uri);
                    final String[] split = docId.split(":");
                    final String type = split[0];
                    if ("primary".equalsIgnoreCase(type)) {
                        return Environment.getExternalStorageDirectory() + "/" + split[1];
                    }
                } else if (isDownloadsDocument(uri)) {// DownloadsProvider
                    final String id = DocumentsContract.getDocumentId(uri);
                    final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
                            Long.valueOf(id));
                    return getDataColumn(context, contentUri, null, null);
                } else if (isMediaDocument(uri)) {// MediaProvider
                    final String docId = DocumentsContract.getDocumentId(uri);
                    final String[] split = docId.split(":");
                    final String type = split[0];
                    Uri contentUri = null;
                    if ("image".equals(type)) {
                        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                    } else if ("video".equals(type)) {
                        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                    } else if ("audio".equals(type)) {
                        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                    }
                    final String selection = "_id=?";
                    final String[] selectionArgs = new String[]{split[1]};
                    return getDataColumn(context, contentUri, selection, selectionArgs);
                }
            } else if ("content".equalsIgnoreCase(uri.getScheme())) {// MediaStore
                // (and
                // general)
                return getDataColumn(context, uri, null, null);
            } else if ("file".equalsIgnoreCase(uri.getScheme())) {// File
                return uri.getPath();
            }
            return null;
        }
    
        /**
         * Get the value of the data column for this Uri. This is useful for
         * MediaStore Uris, and other file-based ContentProviders.
         *
         * @param context       The context.
         * @param uri           The Uri to query.
         * @param selection     (Optional) Filter used in the query.
         * @param selectionArgs (Optional) Selection arguments used in the query.
         * @return The value of the _data column, which is typically a file path.
         */
        public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
            Cursor cursor = null;
            final String column = "_data";
            final String[] projection = {column};
            try {
                cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
                if (cursor != null && cursor.moveToFirst()) {
                    final int column_index = cursor.getColumnIndexOrThrow(column);
                    return cursor.getString(column_index);
                }
            } finally {
                if (cursor != null)
                    cursor.close();
            }
            return null;
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is ExternalStorageProvider.
         */
        public static boolean isExternalStorageDocument(Uri uri) {
            return "com.android.externalstorage.documents".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is DownloadsProvider.
         */
        public static boolean isDownloadsDocument(Uri uri) {
            return "com.android.providers.downloads.documents".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is MediaProvider.
         */
        public static boolean isMediaDocument(Uri uri) {
            return "com.android.providers.media.documents".equals(uri.getAuthority());
        }
    }
    


    展开全文
  • 首先明确一下概念,手机外置存储器是什么?   目前的Android手机分为不能TF卡扩展和能TF卡扩展两种,如市面上的...这里所谓的内存,Android官方称其primary external storage,往往只能有一个,而TF外存储卡,官方称

           首先明确一下概念,手机外置存储器是什么? 

           目前的Android手机分为支持TF卡扩展和不支持TF卡扩展两种,一些手机称配置内存16G,32G,64G,128G等不支持TF卡存储扩展,而另一些手机配置内存8G,16G等,同时支持TF卡存储扩展。这里的内存,Android官方称为primary external storage,一般只能有一个,而TF外存储卡,官方称其为secondary  external storage可以有零到多个。

           在Android较老的版本中,外置存储器路径一般是指的/mnt/sdcard,而我们知道当前的部分Android手机支持存储卡扩展功能,于是Android将相关的路径挪到了/storage下面统一管理,打开Eclipse的DDMS->File Explorer,可以看到Android的文件目录树

            


           在/mnt/sdcard的目录属性中可以看到这个目录其实是一个连接,关于存储的文件目录树如下图

            

           在上面的目录树中可以看出Android对存储器的管理都统一到/storage下面,外存储器对应了sdcard0,sdcard1,sdcard2,sdcard3....(如果有手机提供两个以上TF卡扩展槽的话,市面上好像没有这种手机),之前的/mnt/sdcard指向/storage/emulated/legacy,同时sdcard0也是指向/storage/emulated/legacy,说明两者都是指的手机自带的外置存储器(手机自带的内存)。同时在/storage下有一个sdcard1目录,这个目录对应的就是手机的TF存储扩展卡。

           那么问题来了,开发人员会发现通过方法Environment.getExternalStorageDirectory()获取的是手机自带的外置存储路径/storage/emulated/0(这个路径不同的手机可能不同,但都是指向/storage/emulated/legacy,即primary external storage路径。怎么操作真正的外置TF卡?Android4.3之前可以用/storage/sdcard1表示外置TF卡路径,并在该目录下进行任意读写操作,然而从Android4.4开始,官方对第三方App的读写权限做了限制,应用不能随意操作外置TF卡的根目录,可以读/storage/sdcard1,不能写/storage/sdcard1,这就使应用不能随便在TF卡上创建文件夹。同时Android给第三方App保留了应用私有目录/storage/sdcard1/Android/data/[com.package.name]/files/,在该目录下应用拥有读写权限,该目录有一个特点就是一旦应用卸载,该文件夹下的文件也就随之删除,所以有的应用会给用户一个文件可能随卸载删除的提示。

            最后,如何获取到这个应用私有目录路径呢?

    File[] filearray = getExternalFilesDirs(null);
    for (File file : filearray) {
       System.out.println(file.toString());
    }
             上面的代码通过getExternalFilesDirs()获取了所有外置存储器的应用私有目录路径,路径数组可能是

    /storage/emulated/0/Android/data/com.example.httpdownloadtest/files  <=内外置存储器路径

    /storage/sdcard1/Android/data/com.example.httpdownloadtest/files       <=TF卡路径

    展开全文
  • Android 4.4 以上添加系统信息数据

    千次阅读 2016-09-01 14:53:51
    Android4.4之前的版本,往短信箱插入信息很方便,所以这个对用户来说很有威胁的漏洞,在Android4.4得到了修复。Android4.4中只有手机默认的消息App才能处理和短信相关的操作,而手机默认的消息App一般就是手机里...

    在Android4.4之前的版本,往短信箱插入信息很方便,所以这个对用户来说很有威胁的漏洞,在Android4.4得到了修复。Android4.4中只有手机默认的消息App才能处理和短信相关的操作,而手机默认的消息App一般就是手机里自带的官方App,当然用户可以在设置里面,手动地将自己信任的消息App设置为默认App,总的来说,短信的操作控制权掌握到用户自己的手中。


    让你的应用成为默认短信

    在Android 4.4上,只有一个应用能接收到新增的SMS_DELIVER_ACTION intent,这个intent是当系统接收到新短信时用来发送广播的。哪个应用接收这个广播取决于用户在系统设置里选择了哪个应用作为默认短信应用。同样的,也只有默认的短信应用能在系统接收到新彩信的时候接收到Android 4.4新增加的WAP_PUSH_DELIVER_ACTION intent。
    defaultSmsApp.png

    其他只想读取新信息的应用可以接收SMS_RECEIVED_ACTION广播,这个广播也是系统接收到新短信时发送的。但是只有接收到SMS_DELIVER_ACTION的应用(用户指定的默认短信应用)可以写入由android.provider.Telephony类和子类定义的SMS Provider。因此,尽快升级你的短信应用让它可以成为默认短信应用是很重要的,因为就算你现有的应用不会在Android 4.4的设备上crash,但它尝试写入SMS Provider的时候会在没有提示的情况下失败。

    为了让你的应用在系统设置中作为一个可选的默认短信应用,你的manifest文件必须声明一些特定的内容。所以你必须为你的应用更新以下内容:

    • 在一个broadcast receiver中包含一个SMS_DELIVER_ACTION("android.provider.Telephony.SMS_DELIVER")的intent filter。这个broadcast receiver同样需要BROADCAST_SMS权限。

      这让你的应用可以直接接收到进来的短信。

    • 在一个broadcast receiver包含一个WAP_PUSH_DELIVER_ACTION("android.provider.Telephony.WAP_PUSH_DELIVER")的intent filter,MIME类型是"application/vnd.wap.mms-message"。这个broadcast receiver同样需要BROADCAST_WAP_PUSH权限。

      这让你的应用可以直接接收到进来的彩信。

    • 在你用来发送新信息的activity中包含一个ACTION_SENDTO("android.intent.action.SENDTO")的intent filter,schemas为sms:, smsto:, mms:, 和mmsto:。

      这让你的应用可以接收到其他想发送信息的应用请求的intent。

    • 在一个service里面包含一个ACTION_RESPONSE_VIA_MESSAGE("android.intent.action.RESPOND_VIA_MESSAGE")的intent filter,schemas是sms:, smsto:, mms:, 和 mmsto:。这个service同样需要SEND_RESPOND_VIA_MESSAGE权限。

      这让用户在来电的时候用你的应用进行即时的短信息回复。

    例: Demo工程

    manifest文件

    <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="tina.messagebox" >
    
        <!-- Adding -->
        <uses-permission android:name="android.permission.WRITE_SMS" />
        <uses-permission android:name="android.permission.READ_SMS" />
    
        <!-- End Adding -->
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
    
                    <!-- Adding -->
                    <action android:name="android.intent.action.SEND" />
                    <action android:name="android.intent.action.SENDTO" />
    
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
    
                    <data android:scheme="sms" />
                    <data android:scheme="smsto" />
                    <data android:scheme="mms" />
                    <data android:scheme="mmsto" />
                    <!-- End Adding -->
    
                </intent-filter>
            </activity>
    
            <!-- Adding -->
            <!-- BroadcastReceiver that listens for incoming SMS messages -->
            <receiver
                android:name=".SmsReceiver"
                android:permission="android.permission.BROADCAST_SMS" >
                <intent-filter>
                    <action android:name="android.provider.Telephony.SMS_DELIVER" />
                </intent-filter>
            </receiver>
    
            <!-- BroadcastReceiver that listens for incoming MMS messages -->
            <receiver
                android:name=".MmsReceiver"
                android:permission="android.permission.BROADCAST_WAP_PUSH" >
                <intent-filter>
                    <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
    
                    <data android:mimeType="application/vnd.wap.mms-message" />
                </intent-filter>
            </receiver>
    
            <!-- Service that delivers messages from the phone "quick response" -->
            <service
                android:name=".SmsSendService"
                android:exported="true"
                android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE" >
                <intent-filter>
                    <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
    
                    <category android:name="android.intent.category.DEFAULT" />
    
                    <data android:scheme="sms" />
                    <data android:scheme="smsto" />
                    <data android:scheme="mms" />
                    <data android:scheme="mmsto" />
                </intent-filter>
            </service>
            <!-- End Adding -->
        </application>
    
    </manifest>


    
    
    MainActivity.java

    package tina.messagebox;
    
    import android.content.ContentResolver;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.provider.Telephony;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.text.method.MovementMethod;
    import android.text.method.ScrollingMovementMethod;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    
    public class MainActivity extends ActionBarActivity {
        private String defaultSmsPkg;
        private String mySmsPkg;
        private TextView mMessageView=null;
        private EditText mPhoneNumber=null;
        private EditText mMsg=null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mPhoneNumber=(EditText)findViewById(R.id.editText);
            mMsg=(EditText)findViewById(R.id.editText2);
            mMessageView=(TextView)findViewById(R.id.textView3);
            mMessageView.setMovementMethod(ScrollingMovementMethod.getInstance()); //设置滚动
            defaultSmsPkg= Telephony.Sms.getDefaultSmsPackage(this);
            mySmsPkg= this.getPackageName();
    
            if(!defaultSmsPkg.equals(mySmsPkg)){
    //            如果这个App不是默认的Sms App,则修改成默认的SMS APP
    //            因为从Android 4.4开始,只有默认的SMS APP才能对SMS数据库进行处理
                Intent intent=new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,mySmsPkg);
                startActivity(intent);
            }
    
            Button button=(Button)findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mySmsPkg.equals(Telephony.Sms.getDefaultSmsPackage(MainActivity.this))){
                        if(mPhoneNumber.getText().toString().isEmpty()){
                            Toast.makeText(MainActivity.this,"Phone number cannot be empty!",Toast.LENGTH_LONG).show();
                            return;
                        }
                        if(mMsg.getText().toString().isEmpty()){
                            Toast.makeText(MainActivity.this,"Message cannot be empty!",Toast.LENGTH_LONG).show();
                            return;
                        }
                        System.out.println("My App is default SMS App.");
                        //        对短信数据库进行处理
                        ContentResolver resolver=getContentResolver();
    
                        ContentValues values=new ContentValues();
                        values.put(Telephony.Sms.ADDRESS,mPhoneNumber.getText().toString());
                        values.put(Telephony.Sms.DATE, System.currentTimeMillis());
                        long dateSent=System.currentTimeMillis()-5000;
                        values.put(Telephony.Sms.DATE_SENT,dateSent);
                        values.put(Telephony.Sms.READ,false);
                        values.put(Telephony.Sms.SEEN,false);
                        values.put(Telephony.Sms.STATUS, Telephony.Sms.STATUS_COMPLETE);
                        values.put(Telephony.Sms.BODY, mMsg.getText().toString());
                        values.put(Telephony.Sms.TYPE, Telephony.Sms.MESSAGE_TYPE_INBOX);
    
                        Uri uri=resolver.insert(Telephony.Sms.CONTENT_URI,values);
                        if(uri!=null){
                            long uriId= ContentUris.parseId(uri);
                            System.out.println("uriId "+uriId);
                        }
    
                        Toast.makeText(MainActivity.this, "Insert a short Message.",
                                Toast.LENGTH_LONG).show();
    
    //            对短信数据库处理结束后,恢复原来的默认SMS APP
                        Intent intent=new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                        intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,defaultSmsPkg);
                        startActivity(intent);
                        System.out.println("Recover default SMS App");
    
    //                    打印出收件箱里的最新5条短信
                        Cursor cursor=getContentResolver().query(Telephony.Sms.CONTENT_URI,null,null,null,null);
                        String msg="";
                        while ((cursor.moveToNext()) &&
                                (cursor.getPosition()<5)){
                            int dateColumn=cursor.getColumnIndex("date");
                            int phoneColumn=cursor.getColumnIndex("address");
                            int smsColumn=cursor.getColumnIndex("body");
    
                            System.out.println("count "+cursor.getCount()+" position "+cursor.getPosition());
    //                        把从短信中获取的时间戳换成一定格式的时间
                            SimpleDateFormat sfd=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                            Date date=new Date(Long.parseLong(cursor.getString(dateColumn)));
                            String time=sfd.format(date);
                            msg=msg+time+" "+cursor.getString(phoneColumn)+":"+cursor.getString(smsColumn)+"\n";
                            mMessageView.setText(msg);
                        }
    
                    }
                    else{
                        Toast.makeText(MainActivity.this,"Sorry,the App is not default Sms App.",
                                Toast.LENGTH_LONG).show();
                    }
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

    MmsReceiver.java

    package tina.messagebox;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    /**
     * Created by Tina on 2015/8/11.
     */
    public class MmsReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
    
        }
    }

    SmsReceiver.java

    package tina.messagebox;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    /**
     * Created by Tina on 2015/8/11.
     */
    public class SmsReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
    
        }
    }

    SmsSendService.java

    package tina.messagebox;
    
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    
    public class SmsSendService extends Service {
        public SmsSendService() {
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            // TODO: Return the communication channel to the service.
            return null;
        }
    }


    效果如下:


    展开全文
  • 1、起源:由于项目需要,实现一个基于...2、参考资料:(1)关于Android4.4以上版本的外置存储器路径问题http://blog.csdn.net/HuntCode/article/details/48473205(若涉及版权,请联系我,一定删除)(2)Android...

    1、起源:由于项目需要,实现一个基于高德的定位地图+信息录入+数据库存储+数据导出为txt格式的功能。问题卡在了将数据从SQlite中读出,写入到TXT文本的环节这。

    2、参考资料:

    (1)关于Android4.4以上版本的外置存储器路径问题

    http://blog.csdn.net/HuntCode/article/details/48473205(若涉及版权,请联系我,一定删除)

    (2)Android 4.4及以上版本写入外置SD卡问题

    http://blog.csdn.net/wzchmm/article/details/72843868

    (3)TF卡和SD卡的区别是什么

    http://www.upantool.com/sense/2015/6945.html

    展开全文
  • 由于Google在Android 4.4以上版本中增加了Default App功能以增强系统安全性,因此再像以前一样拦截短信不太可能。1.设置自己的应用default app 这样做将不得不迫使自己的应用实现所有的短信应用接口,势必带来很...
  • 在4.4(也就是API 19)以下的版本一点问题没有,很简单,没啥好说的,但是在4.4以上以及5.1由于系统更新了 SMS 的部分API,加强了权限控制,因此现在只有default SMS app才能对短信数据库有写权限,但是用户可以把第...
  • 文章目录1.数据分析2.总结3.彩蛋 1.数据分析 首先我们来看看谷歌开发者平台上公布的数据,目前各安卓系统...综合以上2项数据可以看出,当前使用android系统的移动设备,Android4.0系统版本以上版本基本覆盖了99...
  • 仿IOS透明通知栏(仅支持4.4以上版本)

    千次阅读 2015-01-27 15:19:40
    4.4开始,Google为Android增加了透明状态栏和导航栏的功能,只需要加入少量代码就可以实现。如图: 在Activity的布局文件父View中添加属性:android:fitsSystemWindows="true"和android:clipToPadding="true...
  • 首先看下第一种方式 ...//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.Layou
  • 目前只有4.4以上版本的真机(不支持虚拟机)支持频幕视频录制功能。 你需要更新adt版本
  • 打开虚拟机,点击新建,类型和版本都设:other 2 内存大小这是虚拟机RAM的大小,视自己电脑的配置选择,2G选择512M,4G以及以上建议1024M,这里选择1024M 3 虚拟磁盘直接...
  • Android 4.4(KitKat)中apk包的安装过程

    万次阅读 2014-05-12 08:55:40
    其实对于apk包的安装,4.4和之前版本没大的差别。Android中app安装主要有以下几种情况:系统启动时安装,adb命令安装,Google Play上下载安装和通过PackageInstaller安装。安装的最核心方法是scanPackageLI(),以上...
  • Android 4.4中apk包的安装过程

    千次阅读 2014-06-15 19:20:03
    其实对于apk包的安装,4.4和之前版本没大的差别。Android中app安装主要有以下几种情况:系统启动时安装,adb命令安装,Google Play上下载安装和通过PackageInstaller安装。安装的最核心方法是scanPackageLI(),以上...
  • 霍涛在开发Android 4.4(API 级别 19)及更高版本中,logcat 包含一个输出行,其中包含名 Displayed 的值。此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间。这个方法比较适合测量程序的启动时间...
  • ##打开相册的方式 Intent.ACTION_PICK 默认打开图库,打开默认是...4.4以上打开文件管理器供选择,选择图库打开缩略图页面,选择图片打开原图浏览,支持多选。 Intent.ACTION_OPEN_DOCUMENT(AP...
  • 背景颜色直到Android 5.0系统才提供了设置状态栏背景颜色的方法,使用StatusBarUtil库可以最低支持到Android 4.4,这个看起来是一个比较好的解决方案,但是状态栏的颜色如果改白色,那么就看不到状态栏内的文字了...
  • Android 系统状态栏一体化实现

    千次阅读 2015-08-15 10:07:04
    自上周更新了QQ手机客户端,对于新版本的QQ...所以测试时候,需要测试手机Android系统版本为4.4以上,才会出现这个效果。附上本文源码以及效果图。 源码下载:点击 一、效果图 二、看MainActivity实现类 packag
  • Playerpro_DSPpack_V4.4

    2015-02-22 20:17:58
    版本4.4 大小1.84MB 语言英文 支持系统 2.0以上 开发商 BlastOn LLC 介绍 PlayerPro DSP pack是顶级音乐播放器PlayerPro的音效插件,拥有10段图形均衡器,该android插件支持所有常见的格式:支持MP3、MP4、M4A、...
  • Android将Uri转换路径

    千次阅读 2020-02-24 11:21:27
    解决的国内产商问题:华为的黄色图标管理器,他返回了4.4的标准的Uri了,不是4.4以上的标准的Uri,导致解析的时候,判断到版本 > 4.4,然后用了4.4以上的标准的解析,然后失败了,并非不回调。 直接可用的代码...
  • Android4.4(API 19) - Android 5.0(API 21): 目前这些版本的手机基本淘汰,此处简单介绍下,实现方式: 通过FLAG_TRANSLUCENT_STATUS设置状态栏透明并且全屏模式,然后通过添加一个与StatusBar 一样大小的...
  • 从用户反馈的情况说用的是VIVO X5机型,然后上网搜了一下这个机型,是2014年的一款手机,预装Android系统版本为Android4.4。 然后就想到是不是低版本不兼容的问题,因为平时用的测试机都是Android5.0以上的机型,...
  • Android沉浸式状态栏

    2017-02-07 17:38:21
    Android版本4.4(API19)之后,就可以对状态栏进行设置了,在浏览了许多资料和自己的实践之后,总结了一个最简单的...//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.V
  • Android 沉浸式状态栏

    2016-12-21 16:26:30
    沉浸式状态栏 从Android kitkat(Android 4.4)开始 ...//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏
  • 在开发过程中可能会有将状态栏设置成白底黑字的样式,但是Android系统只有在4.4之上才可以修改状态栏颜色,想要设置状态栏黑字,只有在Android6.0以上系统或者小米的MIUI V6以上版本或者,魅族的Flyme4.0以上版本...
  • ACTION_OPEN_DOCUMENT 仅限4.4以上使用 默认打开原图ACTION_GET_CONTENT 4.4以下默认打开缩略图 。 以上打开文件管理器 供选择,选择图库打开缩略图页面,选择图片打开原图浏览。ACTION_PICK...
  • 本文实例讲述了Android编程中沉浸式状态栏的三种实现方式。分享给大家供大家参考,具体如下: 沉浸式状态栏 ...//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.V

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

android版本为4.4以上