unity导出的apk装到手机上只有摄像头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity导出的apk装到手机上只有摄像头相关的知识,希望对你有一定的参考价值。

1.首先呢,要确保你的 unity 是从官网上下载的,不然后面的操作你可能会卡住哦。(如果你的 unity 并不是从官网上下载的,那么你可以从 unity hub 中将你这个 unity 卸载,然后去官网下载一个新的 unity,在这里博主给大家提供一个unity下载所有版本的官网,找不到的小伙伴直接点击此链接去下载就好了) unity下载所有版本的官网
https://unity.cn/releases/full/2019
2.接下里就要看看你的 unity 安装的时候有没有选择 unity 自带的 Andriod Build Support、android SDK & NDK Tools

2.1 打开unityhub
2.2点击你使用的 unity 版本的后面那个小齿轮,选择添加模块

2.3查看下方图片内的模块你是否安装,如果没有,选中并且安装到你的电脑上就可以了
3.进入 untiy,点击 Edit 下的 Preference

4.在Preference 的External Tools中 将下面的几个都选中

5.接下来点击 File --> Build Settings

6.找到 Android,将 Development Build 选中,点击Switch PlatForm按钮,最后点击左下角的 Player Settings...

7.选中 Player 面板,点开 Publishing Setting,点击 Keystore Manager...

8. 点击 Keystore...选中 Create New,我们选择在指定的路径下创建一个 Key,点击In Dedicated Location...之后选择你的任意磁盘上的任意路径下,只要你能记得住就可以

9.Alias 是给你新建的 key 起一个别名,password 和 Confirm password 输入相同的你想要设置的密码,Organization 填上你组织的名称,可以先随便起一个,之后点击右下角的 Add Key

10.点击 Select...选择你刚刚在指定的路径创建的 key ,在两个 password 后输入你设置的密码之后就可以了

11.最后回到 Build Settings 面板,点击 Build 选择一个路径,起一个名字就大功告成了

12.最后等待一段时间把生成的 apk 文件通过 QQ 等方式发送到自己的手机安装就可以了!
参考技术A 1.首先呢,要确保你的 unity 是从官网上下载的,不然后面的操作你可能会卡住哦。(如果你的 unity 并不是从官网上下载的,那么你可以从 unity hub 中将你这个 unity 卸载,然后去官网下载一个新的 unity,在这里博主给大家提供一个unity下载所有版本的官网,找不到的小伙伴直接点击此链接去下载就好了) unity下载所有版本的官网https://unity.cn/releases/full/20192.接下里就要看看你的 unity 安装的时候有没有选择 unity 自带的 Andriod Build Support、Android SDK & NDK Tools2.1 打开unityhub2.2点击你使用的 unity 版本的后面那个小齿轮,选择添加模块2.3查看下方图片内的模块你是否安装,如果没有,选中并且安装到你的电脑上就可以了3.进入 untiy,点击 Edit 下的 Preference4.在Preference 的External Tools中 将下面的几个都选中5.接下来点击 File --> Build Settings6.找到 Android,将 Development Build 选中,点击Switch PlatForm按钮,最后点击左下角的 Player Settings...7.选中 Player 面板,点开 Publishing Setting,点击 Keystore Manager...8. 点击 Keystore...选中 Create New,我们选择在指定的路径下创建一个 Key,点击In Dedicated Location...之后选择你的任意磁盘上的任意路径下,只要你能记得住就可以9.Alias 是给你新建的 key 起一个别名,password 和 Confirm password 输入相同的你想要设置的密码,Organization 填上你组织的名称,可以先随便起一个,之后点击右下角的 Add Key10.点击 Select...选择你刚刚在指定的路径创建的 key ,在两个 password 后输入你设置的密码之后就可以了11.最后回到 Build Settings 面板,点击 Build 选择一个路径,起一个名字就大功告成了12.最后等待一段时间把生成的 apk 文件通过 QQ 等方式发送到自己的手机安装就可以了! 参考技术B 首先呢,要确保你的 unity 是从官网上下载的,不然后面的操作你可能会卡住哦。(如果你的 unity 并不是从官网上下载的,那么你可以从 unity hub 中将你这个 unity 卸载,然后去官网下载一个新的 unity,在这里博主给大家提供一个unity下载所有版本的官网,找不到的小伙伴直接点击此链接去下载就好了) unity下载所有版本的官网https://unity.cn/releases/full/20192.接下里就要看看你的 unity 安装的时候有没有选择 unity 自带的 Andriod Build Support、Android SDK & NDK Tools2.1 打开unityhub2.2点击你使用的 unity 版本的后面那个小齿轮,选择添加模块2.3查看下方图片内的模块你是否安装,如果没有,选中并且安装到你的电脑上就可以了3.进入 untiy,点击 Edit 下的 Preference4.在Preference 的External Tools中 将下面的几个都选中5.接下来点击 File --> Build Settings6.找到 Android,将 Development Build 选中,点击Switch PlatForm按钮,最后点击左下角的 Player Settings...7.选中 Player 面板,点开 Publishing Setting,点击 Keystore Manager...8. 点击 Keystore...选中 Create New,我们选择在指定的路径下创建一个 Key,点击In Dedicated Location...之后选择你的任意磁盘上的任意路径下,只要你能记得住就可以9.Alias 是给你新建的 key 起一个别名,password 和 Confirm password 输入相同的你想要设置的密码,Organization 填上你组织的名称,可以先随便起一个,之后点击右下角的 Add Key10.点击 Select...选择你刚刚在指定的路径创建的 key ,在两个 password 后输入你设置的密码之后就可以了11.最后回到 Build Settings 面板,点击 Build 选择一个路径,起一个名字就大功告成了12.最后等待一段时间把生成的 apk 文件通过 QQ 等方式发送到自己的手机安装就可以了! 参考技术C 首先呢,要确保你的 unity 是从官网上下载的,不然后面的操作你可能会卡住,接下里就要看看你的 unity 安装的时候有没有选择 unity 自带的 Andriod Build Support、Android SDK & NDK Tool,打开unityhub,点击你使用的 unity 版本的后面那个小齿轮,选择添加模块,查看模块是否安装,如果没有,选中并且安装到你的电脑上就可以了 参考技术D 首先呢,要确保你的 unity 是从官网上下载的,不然后面的操作你可能会卡住,接下里就要看看你的 unity 安装的时候有没有选择 unity 自带的 Andriod Build Support、Android SDK & NDK Tool,打开unityhub,点击你使用的 unity 版本的后面那个小齿轮,选择添加模块,查看模块是否安装,如果没有,选中并且安装到你的电脑上就可以了

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.记一次BUG与DEBUG衍生的若干问题

记一次BUG与DEBUG衍生的若干问题

记一次BUG与DEBUG衍生的若干问题

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

小米摄像头可以视频吗?

Opencv保存摄像头视频