Android基础知识——运用手机多媒体

Posted ABded

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android基础知识——运用手机多媒体相关的知识,希望对你有一定的参考价值。

文章目录

1.将程序运行到手机上

下面我们讲到的一些代码,可能只有把程序运行到真机上,才会看到效果,教程

2.使用通知

通知是android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。

2.1通知的基本用法

使用步骤:

1.调用getSupportService(NOTIFICATION_SERVICE)方法获取NotificationManager实例。
2.获取NotificationChannel实例。
3.调用manager.createNotificationChannel(channel)方法,创建NotificationChannel。
4.获取Notification实例,再给其设置一些属性。
5.调用managermanager.notify(1(该通知的id),notification)方法,发送通知。

示例;

public class MainActivity extends AppCompatActivity 

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() 
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void onClick(View view) 
                NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//步骤一
                NotificationChannel channel=new NotificationChannel("1","MY_CHANNEL", NotificationManager.IMPORTANCE_DEFAULT);//步骤二,第一个参数是该channel的id,第二个参数是该channel的名字,第三个参数是通知的优先级
                manager.createNotificationChannel(channel);//步骤三
                Notification notification=new NotificationCompat.Builder(MainActivity.this,"1")//步骤四,注意第二个参数是关联channel的id
                        .setContentTitle("This is title")//设置通知的title
                        .setContentText("This is text")//设置通知的text
                        .setWhen(System.currentTimeMillis())//设置通知上显示的发送时间
                        .setSmallIcon(R.mipmap.ic_launcher)//设置通知的小图标
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知的大图标
                        .build();
                manager.notify(1,notification);//发送通知
            
        );
    

2.2通知的进阶技巧

在上节中我们只是简单的发送了一个通知,在本节中我们就来给通知设置上一些进阶性的功能。

给通知设置点击事件:

示例:

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this,0,intent,0);
......
Notification notification=new NotificationCompat.Builder(MainActivity.this,"1")
        .setContentTitle("This is title")
        .setContentText("This is text")
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
        .setContentIntent(pendingIntent)//给通知设置点击事件
        .setAutoCancel(true)//当通知被点击之后,自动取消
        .build();

给通知设置提示音:

首先在res目录下新建一个raw文件夹,在其中存放一段mp3

示例:

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
PendingIntent pendingIntent= PendingIntent.getActivity(MainActivity.this,0,intent,0);
NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationChannel channel=new NotificationChannel("2","MY_CHANNEL", NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(Uri.parse("android.resource://"+MainActivity.this.getPackageName()+"/raw/"+R.raw.music),null);//给通知设置提示音
manager.createNotificationChannel(channel);
Notification notification=new NotificationCompat.Builder(MainActivity.this,"2")
        .setContentTitle("This is title")
        .setContentText("This is text")
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)
        .build();
manager.notify(1,notification);

给通知设置震动:

示例:

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
PendingIntent pendingIntent= PendingIntent.getActivity(MainActivity.this,0,intent,0);
NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationChannel channel=new NotificationChannel("3","MY_CHANNEL", NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(Uri.parse("android.resource://"+MainActivity.this.getPackageName()+"/raw/"+R.raw.music),null);
channel.setVibrationPattern(new long[]0,1000,1000,1000);//给通知设置震动,该震动为通知到来时先震动1s,再静止1s,再震动1s。
manager.createNotificationChannel(channel);
Notification notification=new NotificationCompat.Builder(MainActivity.this,"3")
        .setContentTitle("This is title")
        .setContentText("This is text")
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)
        .build();
manager.notify(1,notification);

2.3通知的高级功能

在本节中我们就来学习给通知设置更多的属性。

设置长文字:

示例:

Notification notification=new NotificationCompat.Builder(MainActivity.this,"4")
        .setContentTitle("This is title")
        .setStyle(new NotificationCompat.BigTextStyle().bigText("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))//给通知设置长文字
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)
        .build();

设置图片:

示例:

Notification notification=new NotificationCompat.Builder(MainActivity.this,"4")
        .setContentTitle("This is title")
        .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.apple))
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//给通知设置图片
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)
        .build();

设置通知的优先级:

示例:

NotificationChannel channel=new NotificationChannel("5","MY_CHANNEL", NotificationManager.IMPORTANCE_HIGH);//第三个参数就是通知的优先级

通知的优先级共分5种:

  • NotificationManager.IMPORTANCE_NONE
  • NotificationManager.IMPORTANCE_MIN
  • NotificationManager.IMPORTANCE_LOW
  • NotificationManager.IMPORTANCE_DEFAULT
  • NotificationManager.IMPORTANCE_HIGH(该模式下通知将变为横幅)

3.调用摄像头以及打开相册

3.1调用摄像头

使用步骤:

1.创建存放照片的文件。
2.获取文件的uri。
3.打开相机。
4.将拍摄得到的照片转换成位图的形式,并显示出来。
5.声明权限,注册内容提供器等。

示例:

public class MainActivity extends AppCompatActivity  
    private Uri uri;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView) findViewById(R.id.image_view);
        Button button=(Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
          	    //步骤一
                File file=new File(getExternalCacheDir(),"output_image.jpg");
                try 
                    if(file.exists())
                        file.delete();
                    
                    file.createNewFile();
                 catch (IOException e) 
                    e.printStackTrace();
                
                //步骤二
                if(Build.VERSION.SDK_INT>=24)//在android7.0之后不允许直接获取文件的真实路径,需要借助内容提供器来获取文件的真实路径,且借助内容提供器可以避免在代码中申请"android.permission.READ_EXTERNAL_STORAGE" 权限
                    uri=FileProvider.getUriForFile(MainActivity.this,"com.example.temp02.fileprovider",file);
                else 
                    uri=Uri.fromFile(file);
                
				//步骤三
                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
                startActivityForResult(intent,1);
            
        );
    

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode)
            case 1:
                if(resultCode==RESULT_OK)
                    try 
                    	//步骤四
                        Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
                        imageView.setImageBitmap(bitmap);
                     catch (FileNotFoundException e) 
                        e.printStackTrace();
                    
                
                break;
            default:
        
    

//步骤五

//声明权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//注册内容提供器
<provider
    android:authorities="com.example.temp02.fileprovider"
    android:name="androidx.core.content.FileProvider"//与步骤二中getUriForFile()方法的第二个参数保持一致
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />//指定Uri的共享路径
</provider>
//xml文件夹下的file_paths文件
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="my_images"//该内容可以随意填写
        path="." />
</paths>

3.2打开相册并显示所选图片

使用步骤:

1.动态申请权限;
2.打开相册。
3.解析所选图片的真实地址。
4.显示所选图片。

示例:

//布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
//活动
public class MainActivity extends AppCompatActivity

    private  ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button) findViewById(R.id.button);
        imageView=(ImageView) findViewById(R.id.image_view);
        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) //步骤一
                if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
                    ActivityCompat.requestPermissions(MainActivity.this,new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE,2);
                else 
                    openAlbum();
                
            
        );
    

    public void openAlbum()//步骤二
        Intent intent=new Intent("android.intent.action.GET_CONTENT");
        intent.setType("image/*");//选则要获取的文件的类型
        startActivityForResult(intent,1);
    

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 
        switch (requestCode)
            case 2:
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
                    openAlbum();
                else 
                    Toast.makeText(MainActivity.this,"You denied the permission",Toast.LENGTH_SHORT).show();
                
                break;
            default:
        
    

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode)
            case 1:
                if(resultCode==RESULT_OK)
                    //判断手机版本号再对图片进行不同的解析(步骤三)
                    if(Build.VERSION.SDK_INT>=19)
                        //4.4以上系统使用这个方法处理图片
                        handleImageOnKitKat(data);
                    else 
                        //4.4以下系统使用这个方法处理图片
                        handleImageBeforeKitKat(data);
                    
                
                break;
            default:
        
    

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public void handleImageOnKitKat(Intent data)//(不同类型的图片,要用不同形式的解析方法)
        String imagePath=null;
        Uri uri=data.Android基础知识:Day09 多媒体编程

安卓运用手机多媒体

在 android 上的播放器功能区下方放置横幅广告

运用手机多媒体之使用通知

运用手机多媒体之使用通知

运用手机多媒体