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 多媒体编程