Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在用户需要后自动更改图像按钮?_Java_Android - Fatal编程技术网

Java 如何在用户需要后自动更改图像按钮?

Java 如何在用户需要后自动更改图像按钮?,java,android,Java,Android,我正在制作一个应用程序,你可以用它启动Netflix等其他应用程序。我在第一个XML文件上有四个ImageButton,它将成为“收藏夹”。当您单击这些图像按钮中的任何一个时,您将启动要启动的应用程序的意图。然后应用程序被打开。如何使收藏夹在用户使用后自动更改 以下是我的Java代码: package com.carlo_projekt.tvprograms; import android.app.AlertDialog; import android.cont

我正在制作一个应用程序,你可以用它启动Netflix等其他应用程序。我在第一个XML文件上有四个ImageButton,它将成为“收藏夹”。当您单击这些图像按钮中的任何一个时,您将启动要启动的应用程序的意图。然后应用程序被打开。如何使收藏夹在用户使用后自动更改

以下是我的Java代码:

    package com.carlo_projekt.tvprograms;
    
    import android.app.AlertDialog;
    import android.content.ActivityNotFoundException;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.net.Uri;
    import android.speech.RecognizerIntent;
    import android.speech.tts.TextToSpeech;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Locale;

'    public class MainActivity extends AppCompatActivity {

    ImageButton speakBtn;
    Button CategoriesBtn;

    TextView text;

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

        speakBtn = (ImageButton) findViewById(R.id.SpeakImageBtn);
        CategoriesBtn = (Button) findViewById(R.id.CategoriesBtn);
        text = (TextView) findViewById(R.id.textView);

    }


    public void OpenGame(View view) {
        Intent intent = new Intent(this, MoreActivity.class);
        startActivity(intent);
    }

    public void Speak(View view)
    {
        Intent recognizeIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        recognizeIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        recognizeIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
        recognizeIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Hi! Which app do you want to start?");

        try {
            startActivityForResult(recognizeIntent, 1);

        }
        catch (ActivityNotFoundException a)
        {
            Toast.makeText(MainActivity.this, "Sorry! Your device doesn't support this function!", Toast.LENGTH_LONG).show();
        }
    }

    public void onActivityResult(int request_Code, int result_Code, Intent recognizeIntent)
    {
        super.onActivityResult(request_Code, result_Code, recognizeIntent);
        switch (request_Code)
        {
            case 1: if(result_Code == RESULT_OK && recognizeIntent != null)
            {
                ArrayList<String> result = recognizeIntent.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                for(int i = 0; i<result.size(); i++)
                {
                    result.set(i, result.get(i).toLowerCase());

                    if(result.get(i).compareTo("start netflix") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("com.netflix.mediaclient");
                        startActivity(NetflixIntent);
                    }

                    else if(result.get(i).compareTo("start youtube") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("com.google.android.youtube");
                        startActivity(NetflixIntent);
                    }

                    else if(result.get(i).compareTo("start viafree") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("se.viafree.android");
                        startActivity(NetflixIntent);
                    }

                    else if(result.get(i).compareTo("start tvfour") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("se.tv4.tv4playtab");
                        startActivity(NetflixIntent);
                    }

                    else if(result.get(i).compareTo("start dplay") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("se.kanal5play");
                        startActivity(NetflixIntent);
                    }

                    else if(result.get(i).compareTo("start viaplay") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("com.viaplay.android");
                        startActivity(NetflixIntent);
                    }

                    else if(result.get(i).compareTo("start svtplay") == 0)
                    {
                        Intent NetflixIntent = getPackageManager().getLaunchIntentForPackage("se.svt.android.svtplay");
                        startActivity(NetflixIntent);
                    }
                    /**text.setText(result.get(i));*/
                }
            }
        }

    }

    public void OpenApps(String packageName)
    {
        if(getPackageManager().getLaunchIntentForPackage(packageName) != null)
        {
            Intent tv4PlayIntent = getPackageManager().getLaunchIntentForPackage(packageName);
            startActivity(tv4PlayIntent);
        }
        else
        {

        String marketAppPackageName = "market://details?id="+ packageName;
        MessageBox(marketAppPackageName);

        }
    }

    public void NetflixFunction(View view)
    {
        String netflixPackageName = new String("com.netflix.mediaclient");
        OpenApps(netflixPackageName);
    }

    public void ViafreeFunction(View view)
    {
        String viafreePackageName = new String("se.viafree.android");
        OpenApps(viafreePackageName);
    }

    public void YoutubeFunction(View view)
    {
        String youtubePackageName = new String("com.google.android.youtube");
        OpenApps(youtubePackageName);
    }

    public void Tv4PlayFunction(View view)
    {
        String tv4playPackageName = new String("se.tv4.tv4playtab");
        OpenApps(tv4playPackageName);
    }



    public void LayoutsShow(View view)
    {
        RelativeLayout layoutShow = findViewById(R.id.LayoutShow);

        if (layoutShow.getVisibility() == View.GONE) {
            layoutShow.setVisibility(View.VISIBLE);
        }

        else if (layoutShow.getVisibility() == View.VISIBLE) {
            layoutShow.setVisibility(View.GONE);
        }
    }

    public void MessageBox(final String uriIntent)
    {
        AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
        alertDialog.setTitle("Couldn't find this app");
        String messageText = "We cant find this app, do you want to download it?";
        alertDialog.setMessage(messageText);

        alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent MarketIntent = new Intent(Intent.ACTION_VIEW);
                        MarketIntent.setData(Uri.parse(uriIntent));
                        startActivity(MarketIntent);
                        dialog.dismiss();
                    }
                });

        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "No",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        alertDialog.show();
    }}
package com.carlo_projekt.tvprograms;
导入android.app.AlertDialog;
导入android.content.ActivityNotFoundException;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.net.Uri;
导入android.speech.RecognizerIntent;
导入android.speech.tts.TextToSpeech;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageButton;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.lang.reflect.Array;
导入java.util.ArrayList;
导入java.util.Locale;
'公共类MainActivity扩展了AppCompatActivity{
图像按钮speakBtn;
按钮类别BTN;
文本查看文本;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speakBtn=(ImageButton)findViewById(R.id.SpeakImageBtn);
CategoriesBtn=(按钮)findViewById(R.id.CategoriesBtn);
text=(TextView)findViewById(R.id.TextView);
}
公共void OpenGame(视图){
Intent Intent=新的Intent(this,MoreActivity.class);
星触觉(意向);
}
公开演讲(视图)
{
意向识别意向=新意向(识别意向、行动、识别、讲话);
recognizeIntent.putExtra(RecognizerIntent.EXTRA语言模型,RecognizerIntent.LANGUAGE模型自由形式);
recognizeIntent.putExtra(RecognizerIntent.EXTRA_语言,“en-US”);
recognizeIntent.putExtra(RecognizerIntent.EXTRA_提示“嗨!你想启动哪个应用程序?”);
试一试{
startActivityForResult(认可意向,1);
}
捕获(ActivityNotFoundException a)
{
Toast.makeText(MainActivity.this,“抱歉!您的设备不支持此函数!”,Toast.LENGTH\u LONG.show();
}
}
ActivityResult上的公共无效(int请求\代码、int结果\代码、意图识别意图)
{
super.onActivityResult(请求代码、结果代码、识别意图);
开关(请求代码)
{
案例1:if(result\u Code==result\u OK&&recognizeIntent!=null)
{
ArrayList结果=recognizeIntent.GetStringArrayListXTRA(RecognizerIntent.EXTRA_结果);

对于(int i=0;iGet SharedReferences对象:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
创建一个单击侦听器,该侦听器将更新相应按钮的单击计数:

View.OnClickListener myClickListener= new View.OnClickListener() {
    public void onClick(View v) {
        String tag = (String) v.getTag();
        sharedPref
             .edit()
             .putInt(tag, shardPref.getInteger(tag) + 1)
             .apply();
    }
};
现在,对于每个按钮,您都需要设置click listener和用于命名的标记:

Button btn = findViewById(R.id.NetflixImageBtn);
btn.setTag("netflix");
btn.setOnClickListener(myClickListener);

现在,当您单击一个按钮时,它将增加与标记关联的计数。您可以随意使用该信息。

您可以创建一个按钮,设置应用程序并从选择器获取应用程序包,然后使用该包从“PackageManager”获取应用程序图标,并将该可绘制内容提供给imagebutton。然后在保留跟踪该软件包,在意图中启动它,但我想让它检查用户使用最多的内容,然后再进行更改。就像一个检查器,它总是侦听从该应用启动的witch应用程序。在按钮中添加一个单击侦听器。单击按钮时,捕获ID并增加SharedReferences中的计数。好的,听起来不错!T谢谢你的帮助!我会试试这个!谢谢你的帮助!我会试试这个!好的,谢谢。但是我如何将packagename和picture更改为imagebutton。就像如果一个按钮有更多的点击,它将从一个imagebutton更改为另一个。我想制作四个imagebutton,它们可以打开不同的应用程序,但它将打开的witch应用程序取决于哪个应用程序谁是最常用的。例如,如果我从这个应用程序打开netflix 10次,而我只打开yoitube 3次,那么它们会相互改变位置。然后,你应该以编程方式布置按钮,而不是在XML中硬编码。按单击次数对要创建的按钮列表排序,然后将它们添加到布局中。我如何编写tjava代码中的hat代码?我是android studio的新手,所以我只知道如何使用它。没有问题。如果您的问题解决了,请使用复选标记来标记它。如果您还有其他问题,请询问。
Button btn = findViewById(R.id.NetflixImageBtn);
btn.setTag("netflix");
btn.setOnClickListener(myClickListener);